3

SQL Server 2008に大量の画像データを保存するためのベストプラクティスは何ですか?約5ギガのストレージスペースを使用して、約50,000枚の画像を保存する予定です。現在、列を持つ単一のテーブルを使用してこれを行っています。

ID: int/PK/identity
Picture: Image
Thumbnail: Image
UploadDate: DateTime

予想総容量の約10%でインサートに時間がかかっているようですので気になります。典型的な画像は約20k〜30kです。このデータを保存するためのより良い論理構造はありますか?または、データの負荷に対応するために、クラスタリングまたはその他のITソリューションを調べる必要がありますか?

4

3 に答える 3

4

DBに、またはDBにしない、それが問題です。

あなたはここでDBの画像を使って宗教戦争を始めています。

SQL 2000については意見が分かれますが、2005以降ではblobを格納するというかなり適切な仕事をしています。ストレージとしてMSSQLServerを使用するSharePointインストールの数を見てください。私はマイナーな画像ストレージのためだけにこのルートに行きます。

それらをDBに配置することになった場合は、クエリを容易にし、開発者が書き込むときのIOとインスタンスを減らすために、イメージをそれに関連付けられたデータから分離する必要がありますSELECT *(そうです)。

SQL2008のFILESTREAMを確認してください。これはこのようなことを目的としています。

DBとファイルシステムに関するその他の考慮事項を次に示します。

  • DBストレージ、バックアップ、復元、メンテナンスライセンスは高額です
  • DBのストレージは、ディスクよりも取得が困難です
  • ディスクを高速化できます
  • DBでイメージを取得/設定するためのコードを記述する必要があります-ディスクには必要ありません
于 2009-11-30T15:17:17.463 に答える
4

ImageはSQLServer2008で非推奨のデータ型です。SQLServer2005以降に置き換えられましVARBINARY(MAX)た。イメージをDBに保存する場合は、VARBINARY(MAX)フィールドを使用してFILESTREAMオプションの追加を検討する必要があります。

このホワイトペーパーによると、画像のようなストリーミングデータの場合、単独FILESTREAMよりもはるかに高速です。VARBINARY(MAX)

ファイルストリームとvarbinary(max)のパフォーマンス
(ソース:microsoft.com

このストリーミングパフォーマンスを実現するには、デザインで適切なAPIを使用し、BLOBのWin32ハンドルを取得する必要があることに注意してください。FILESTREAM列(を含む)への更新は。INSERTSよりも遅くなることに注意してくださいVARBINARY(MAX)

于 2009-11-30T16:31:42.113 に答える
2

SQL Server 2008の新しいファイルストリーム機能を確認してください。基本的に、読み取りと書き込みのたびにデータをSQLバッファーに読み込む必要がなく、blob(読み取り:イメージ)データをデータベースに格納できます。SQLページの代わりにfilesytemをシームレスに使用して大きなファイルを保存します。これにより、大きなファイルの読み取りと書き込みの時間が大幅に短縮されます。何よりも、これはすべて内部で行われるため、ファイルストリーム列を処理するために既存のストアドプロシージャを変更する必要はありません。コードサンプルといくつかのパフォーマンスプロファイリングについては、こちらをご覧ください。

于 2009-11-30T15:23:36.603 に答える