4

自分の Web サイトにアップロードするドキュメントに関して、設計上の決定を下す必要があります。ドキュメントをファイル サーバーのどこかに保存するか、データベース (MSSQL 2005) に blob として保存するかのいずれかです。設計上の決定に何らかの違いが生じる場合、これらの文書は機密であり、ある程度の保護が必要です。

私が考えた考慮事項は次のとおりです。

  1. ファイル サーバーに格納すると、HUUUUUUUGE 個のファイルがすべて単一のディレクトリにダンプされるため、ディレクトリ ツリー構造の合理的なセマンティック定義を作成できない限り、アクセスが遅くなります。
  2. OTOH、ファイルサーバーはDBよりも圧縮をいくらかうまく処理できると思います...または私は間違っていますか?
  3. 私の直感では、DB のセキュリティはファイル サーバーのセキュリティよりも強力であると言えますが、それが必ずしも正しいかどうかはわかりません。
  4. DB に数テラバイトのブロブがあるとパフォーマンスにどのような影響があるかわかりません。

ここでいくつかの推奨事項をいただければ幸いです。ありがとう!

4

3 に答える 3

7

VARBINARY(MAX)SQL Server 2005 では、ファイルをデータベース テーブル内に格納するか、外部に保持するかを選択することしかできません。

それらをデータベースの外に置くことの明らかな欠点は、データベースがそれらに何が起こるかを実際に制御できないことです。それらは移動、名前変更、削除できます.....

SQL Server 2008FILESTERAMでは、タイプの属性が導入されましたVARBINARY(MAX)。これにより、データベース テーブルの外にファイルを残すことができますが、データベースのトランザクション制御下に置くことができます。たとえば、ファイルをディスクから削除することはできません。ファイルはデータベースの不可欠な部分であり、したがって、それをコピーしてバックアップします。必要に応じて最適ですが、大規模なバックアップになる可能性があります。:-)

SQL Server 2008 のリリースでは、データをデータベースに直接格納する場合と FILESTREAM を使用する場合について、いくつかの「ベスト プラクティス」が提示されました。これらは:

  • 通常、ファイルのサイズが 256 KB 未満の場合は、データベース テーブルが最適なオプションです。
  • ファイルのサイズが通常 1 MB を超える場合、またはサイズが 2 GB を超える可能性がある場合は、FILESTREAM (または、あなたの場合は単純な古いファイル システム) が最適な選択です。
  • これらの 2 つのマージンの間のファイルは推奨されません

また、クエリのパフォーマンスに悪影響を与えないようにするために、大きなファイルをまとめて別のテーブルに配置することをお勧めします。巨大なブロブをクエリする通常のテーブルの一部にしないでください。メガバイトのドキュメントまたは画像が本当に必要な場合にのみ、クエリを実行する別のテーブル。

これにより、どこから始めればよいかがわかります。

于 2010-02-04T17:07:18.500 に答える
3

ファイルシステム ソリューションを検討することを強くお勧めします。理由は次のとおりです。

  • ファイルへのアクセスが改善されます (デバッグの場合は貴重です)。つまり、通常のコンソールベースのツールを使用できます。
  • たとえば、分散ファイルシステムを使用したり、ハードウェア RAID を介して冗長性を追加したりするなど、OS をすばやく簡単に利用して負荷を分散できます。
  • OS のアクセス制御リストを利用して権限を適用できます。
  • データベースを詰まらせません

ディレクトリ内の大量のエントリが心配な場合は、いつでもブランチ スキーマを作成できます。例えば:

filename : hello.txt
filename md5: 2e54144ba487ae25d03a3caba233da71
final filesystem position: /path/2e/54/hello.txt
于 2010-02-04T17:17:29.320 に答える
1

この人気のある主題の背後には、「場合による」ことがたくさんあります。ドキュメントは機密で機密であるとあなたは言っているので、すぐにデータベースに保存することにします。いくつかの理由を次に示します。

  • セキュリティが向上する可能性があります。多くの場合、データベースよりもファイル システムをハッキングする方が簡単です。
  • より良いボリュームコントロール。1 つのフォルダーに数千のファイルがあると、OS に負荷がかかる可能性があります。OS では、データベースが 1 つのテーブルに数百万行を瞬きすることなく取得できます。
  • より良い検索とスキャン。データをロードするときに分類列を追加するか、全文索引付けを試して実際のドキュメントをスキャンします。
  • バックアップの方が効率的かもしれません。別のデータベースをバックアップ プランに追加するだけで十分です (もちろん、容量の詳細を把握したら)。そして、これらのバックアップ ファイルは、機密文書を入手しようとする人にとって、難読化の別のレイヤーです。
  • SQL Server 2008 には、ここで役立つデータ圧縮オプションがあります。それ、またはアプリケーションにそれをさせますか?(おそらく、難読化によるセキュリティの強化)

SQL Server 2008 には filestream データ型もあり、ここで役立つかもしれませんが、状況に合わせて推奨できるほど詳しくはありません。

于 2010-02-04T17:17:27.007 に答える