考慮事項ドキュメントをどこに保存するか - ファイルサーバーまたはDBで?
-
18-09-2019 - |
質問
私は自分のWebサイトにアップロードされたドキュメントに関して作成するデザインの決定を持っています:私はそれらをどこかにファイルサーバーに保存するか、データベースにBlobとしてそれらを保存することができます(MSSQL 2005)。設計上の決定に違いがある場合、これらの文書は機密であり、ある程度の保護が必要です。
私が考えた考慮事項は次のとおりです。
- ファイルサーバーに保存すると、ファイルの数がすべて単一のディレクトリにダンプされているため、ディレクトリツリー構造の合理的なセマンティック定義を解決できない限り、アクセスが遅くなります。
- otoh、ファイルサーバーはDBよりもやや優れているか、または間違っていると思いますか?
- 私の本能は、DBのセキュリティはファイルサーバーのセキュリティよりも強いことを教えてくれますが、それが必ずしも真実かどうかはわかりません。
- 私のDBにテラバイトのブロブを持っていることがパフォーマンスにどのように影響するかはわかりません。
ここでいくつかの推奨事項に感謝します。ありがとう!
解決
SQL Server 2005では、使用する選択肢のみがあります VARBINARY(MAX)
ファイルをデータベーステーブル内に保存するか、外部に保管します。
データベースの外に残したことの明らかな欠点は、データベースが実際に何が起こるかを実際に制御できないことです。それらは移動したり、名前が変更されたり、削除されたりすることができます.....
SQLサーバー 2008 紹介します FILESTERAM
属性 VARBINARY(MAX)
ファイルをデータベーステーブルの外側に残すことができますが、データベースのトランザクション制御中です。たとえば、ディスクからファイルを削除するだけでは、ファイルはデータベースの不可欠な部分であるため、コピーされてバックアップされます。それ。あなたがそれを必要とするなら素晴らしいですが、それはいくつかの巨大なバックアップを作ることができます! :-)
SQL Server 2008の起動は、データベースに物を直接保存するタイミングとFileStreamを使用するタイミングについていくつかの「ベストプラクティス」を提示しました。これらは:
- ファイルのサイズが通常256 kb未満の場合、データベーステーブルが最適なオプションです
- ファイルのサイズが通常1 MBを超えている場合、またはサイズが2 GBを超える可能性がある場合、Filestream(または場合:Plain Ald Files -System)が最良の選択です
- これら2つのマージン間のファイルの推奨はありません
また、クエリのパフォーマンスに悪影響を与えないために、大きなファイルを別のテーブルにまったく入れることをお勧めします。ドキュメントや画像のメガバイトが本当に必要な場合、あなたがこれまでに照会するだけのテーブルを分離します。
それで、それはあなたにどこから始めるべきかをあなたにアイデアを与えるかもしれません!
他のヒント
ファイルシステムソリューションを検討することを強くお勧めします。理由は次のとおりです。
- ファイルへのアクセスを改善しています(デバッグの場合は貴重)。つまり、通常のコンソールベースのツールを使用できることを意味します。
- OSを迅速かつ簡単に利用して負荷を配布できます。たとえば、分散ファイルシステムを使用して、ハードウェアの襲撃などを介して冗長性を追加できます。
- OSアクセス制御リストを利用して、アクセス許可を強制できます。
- データベースを詰まらせません
ディレクトリの大量のエントリが心配な場合は、いつでも分岐スキーマを作成できます。例えば:
filename : hello.txt
filename md5: 2e54144ba487ae25d03a3caba233da71
final filesystem position: /path/2e/54/hello.txt
この人気のある主題の背後には、「それは依存している」という多くの「それはたくさんあります。ドキュメントは敏感で機密性が高いと言うので、カフから外れてデータベースに保存することになります。ここにいくつかの理由があります:
- 潜在的により良いセキュリティ。多くの場合、データベースよりもファイルシステムをハッキングする方が簡単です。
- より良いボリューム制御。 1つのフォルダー内の何千ものファイルがOSに負担をかけることができます。このファイルでは、データベースが点滅することなく1つのテーブルで数百万行を撮ることができます。
- より良い検索とスキャン。データをロードするときに分類列を追加するか、実際のドキュメントをスキャンするために全文インデックスを試してみます。
- バックアップの方が効率的になる場合があります。バックアッププランに別のデータベースを追加するだけで、カバーされています(もちろん、スペースの詳細を作成したら)。そして、これらのバックアップファイルは、あなたの機密文書で取得しようとしている人に対する難読化の別の層です。
- SQL Server 2008には、ここで役立つデータ圧縮オプションがあります。それ、またはアプリケーションにそれをしましたか? (おそらく難読化によるより多くのセキュリティ)
SQL Server 2008にはFilestreamのデータタイプもありますが、これはここで役立つかもしれませんが、あなたの状況に推奨するのに十分な精通していません。