ファイルシステムではなくデータベースにファイルを保存しますか?


83

一般に、ファイルシステムとは対照的に、データベース(具体的にはmssql)にファイルを保存することはパフォーマンスへの影響がどれほど悪いですか?アプリケーションの移植性以外に、ファイルをSQLServerに変数として保存したいという理由を思い付くことができません。

回答:


77

この答えを見てください:

DBに画像を保存する-そうですか、それともそうですか?

基本的に、ユーザー数によっては、スペースとパフォーマンスの低下が非常に大きくなる可能性があります。また、Webサーバーは安価であり、負荷を分散するために簡単に追加できるのに対し、データベースは通常、Webアーキテクチャの一部で最も高価であり、拡張が最も難しいことに注意してください。

反対の例がいくつかありますが(Microsoft Sharepointなど)、通常、データベースにファイルを保存することはお勧めできません。

デスクトップアプリを作成したり、ユーザーの数を大まかに把握したりしない限り、公開Webサイトのようにランダムで予想外の場合は、データベースにファイルを保存するのに高額の費用がかかる可能性があります。


36

SQL Server 2008に移行できる場合は、両方の長所を提供するFILESTREAMサポートを利用できます。ファイルはファイルシステムに保存されますが、データベース統合は、varcharフィールドにファイルパスを保存するよりもはるかに優れています。クエリは標準の.NETファイルストリームを返すことができるため、統合が非常に簡単になります。

FILESTREAMストレージ入門


1
ここで予約をしています。具体的には、スケーラビリティと可用性の側面です。これらの「ブロブ」が格納される場所をどのように制御しますか?
Dave Van den Eynde 2009

3
スケーラビリティと可用性はかなりよく考えられているようです-このホワイトペーパーを参照してください
Jon Galloway

2
これに対する1つの注意点は、データベースに接続するときに統合セキュリティ(つまり、Windows認証)を使用する必要があることです。blogs.msdn.com
Sven

22

状況次第だと思います。たとえば、私は地方自治体で働いており、マグショットなどの画像がたくさんあります。ユーザー数はそれほど多くありませんが、セキュリティとデータの監査を十分に行う必要があります。データベースはこれを容易にし、スケーリングの問題に遭遇することがないため、私たちにとってより良いソリューションです。


6

ここでの質問は何ですか?

最新のDBMSSQL2008には、テーブルに固定されているだけではないBLOBを処理するさまざまな方法があります。もちろん、長所と短所があり、もう少し深く考える必要があるかもしれません。

これは、故(?)ジム・グレイによる興味深い論文です。

BLOBへの移行またはBLOBへの移行:データベースまたはファイルシステム内のラージオブジェクトストレージ


3

私自身の経験では、ファイルをファイルとして保存することをお勧めします。その理由は、ファイルシステムはファイルの保存用に最適化されていますが、データベースは最適化されていないためです。もちろん、いくつかの例外があります(たとえば、非常に有名な次世代MSファイルシステムはSQLサーバー上に構築されることになっています)が、一般的にはそれが私のルールです。


3

パフォーマンスは問題ですが、最近のデータベース設計では、小さなファイルの問題ははるかに少なくなっていると思います。

パフォーマンスはさておき、データがどれだけ緊密に結合されているかにも依存します。ファイルにデータベースのフィールドに密接に関連するデータが含まれている場合、ファイルは概念的にその近くに属し、blobに格納される可能性があります。複数のレコードに関連する可能性のある情報が含まれている場合、またはデータベースのコンテキスト外で使用される可能性がある場合は、外部に属します。たとえば、Webページ上の画像は、それにリンクしているページとは別のリクエストでフェッチされるため、外部に属する場合があります(特定の設計とセキュリティの考慮事項によって異なります)。

私たちの妥協案は、それが最善であるとは約束していませんが、小さいXMLファイルをデータベースに保存し、画像やその他のファイルをデータベースの外部に保存することでした。


小さいファイルと大きいファイルをどう思いますか?
ユビキバコン2016

2

パフォーマンスの問題を途中で予想して、http: //www.freshlogicstudios.com/Products/Folders/のvarbinaryとして保存することを決定しました。うまくいったことに嬉しい驚きを感じたと言えます。


1

@ZombieSheepに同意します。もう1つ、DBMSベンダーが提供するすべての機能を見逃しているため、データベースが実際に移植可能である必要はないと私は考えています。別のデータベースへの移行は、最後に検討することになると思います。ちょうど私の$ .02


1

BLOB(イメージ)をバイト配列に解析し、それを適切なファイル名でディスクに書き込んでから読み取る必要があるオーバーヘッドは、特にファイルが次の場合に、これを頻繁に行うことを思いとどまらせるのに十分なオーバーヘッドヒットですかなり大きい。


1
この「ファイル」をディスクに書き込んで再度読み取る必要があるとはどこにも言及されていません。
Dave Van den Eynde 2009

これは、画像を後で表示する必要がある場合、特に異なる形式で保存する場合や、サイズが大きいために画像を長期間メモリに保持できないシナリオでは、暗黙のタスクです。
Jon Limjap 2009

0

曖昧ではありませんが、保存する「ファイル」の種類が最大の決定要因の1つだと思います。あなたが本質的にファイルとして保存できる大きなテキストフィールドについて話しているなら、私の好みはデータベースストレージです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.