11

私のアプリケーションは、そのユーザーが登録された後にビデオファイルを再生します(ファイルは100 MBを超えています)。

  1. それらをハードドライブに保存し、ファイルパスをデータベースに保持する方が良いですか? または 、ファイルストリームタイプとしてデータベースに保存しますか?

  2. データがデータベースに保存されている場合、ハードに保存されている場合よりも操作に対してより安全ですか?

  3. 操作に対するデータセキュリティを提供する方法は?

ありがとう 。

4

2 に答える 2

14

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

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

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

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

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

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

ファイル グループについては、「ファイルとファイル グループのアーキテクチャ」で概要を確認してください。基本的に、最初から大規模なデータ構造用に別のファイル グループを使用してデータベースを作成するか、後でファイル グループを追加します。と呼びましょう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 のイントロをチェックして、いろいろ試してみてください。

于 2013-03-12T09:03:14.767 に答える
2

1 - 「より良い」をどのように定義するかによって異なります。一般に、バイナリ アセットをデータベースに保存して、関連するデータと一緒にバックアップすることを好みますが、ファイル システムにキャッシュします。ページ要求のために SQL Server からバイナリ データをストリーミングすることは、実際にパフォーマンスを浪費し、実際にはスケーリングしません。

  1. 攻撃者がハード ドライブにアクセスできた場合、システム全体が危険にさらされます。データベースにデータを格納しても、セキュリティが大幅に強化されるわけではありません。

3 - それ自体が問題です。スタック オーバーフローには広すぎます...

于 2013-03-12T08:33:07.333 に答える