89

これは私が知っている古い質問ですが、SQL Server 2012では、ファイルをデータベースに保存することは最終的に問題ありませんか、それともデータベース内のファイルへの参照のみを使用してファイルシステムに保存する必要がありますか?

それらをデータベースに保存することが最近受け入れられると考えられる場合、それを行うための最も効果的な方法は何ですか?

暗号化を適用する予定なので、処理が非常に速くならないことを感謝しています。

4

3 に答える 3

129

To Blob or Not To Blobと呼ばれる Microsoft Research による非常に優れた論文があります。

多数のパフォーマンス テストと分析を行った後の結論は次のとおりです。

  • 写真やドキュメントのサイズが通常 256K 未満の場合は、データベースの VARBINARY 列に格納する方が効率的です。

  • 通常、画像やドキュメントのサイズが 1 MB を超える場合は、ファイル システムに格納する方が効率的です (SQL Server 2008 の FILESTREAM 属性を使用すると、それらは引き続きトランザクション制御下にあり、データベースの一部になります)。

  • これら2つの間で、用途に応じて少しトスアップします

写真を SQL Server テーブルに格納する場合は、それらの写真を保存するために別のテーブルを使用することを強くお勧めします。従業員の写真を従業員テーブルに保存しないでください。別のテーブルに保存してください。こうすることで、従業員の写真をクエリの一部として常に選択する必要がないと仮定すると、従業員テーブルを無駄のない、平均的な、非常に効率的な状態に保つことができます。

ファイル グループについては、「ファイルとファイル グループのアーキテクチャ」で概要を確認してください。基本的に、最初から大規模なデータ構造用に別のファイル グループを使用してデータベースを作成するか、後でファイル グループを追加します。「LARGE_DATA」としましょう。

これで、VARCHAR(MAX) または VARBINARY(MAX) 列を格納する必要がある新しいテーブルを作成する必要がある場合はいつでも、大きなデータ用にこのファイル グループを指定できます。

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

ファイル グループに関する MSDN のイントロをチェックして、いろいろ試してみてください。

于 2012-11-16T16:56:40.157 に答える
30

簡単な答えはまだありません。シナリオによって異なります。 MSDN には、決定に役立つドキュメントがあります。

ここで説明する他のオプションがあります。ファイル システムに直接格納するか BLOB に格納する代わりに、SQL Server 2012 の FileStream またはファイル テーブルを使用できます。 .)

記事は間違いなく読む価値があります。

于 2012-11-16T16:18:15.470 に答える
12

FILESTREAMを読むことができます。決定に役立つドキュメントからの情報を次に示します。

次の条件に該当する場合は、FILESTREAM の使用を検討する必要があります。

  • 格納されているオブジェクトは、平均して 1 MB を超えています。
  • 高速読み取りアクセスが重要です。
  • アプリケーション ロジックに中間層を使用するアプリケーションを開発しています。

小さいオブジェクトの場合、データベースに varbinary(max) BLOB を格納すると、多くの場合、ストリーミング パフォーマンスが向上します。

于 2012-11-16T16:18:11.320 に答える