画像をデータベースに保存するか、データベースリンクのあるファイルに保存しますか?


22

画像ファイルをデータベースに保存するのは適切ですか?または、ファイル自体をサーバーに保持しながら、ファイルのパスのみをデータベースに保存する方が良いでしょうか?

これを正しく行う他の方法はありますか?

回答:


22

データベースではなくファイルシステムに画像を保存することを強くお勧めします。

データベースに画像を保存することには、いくつかの欠点があります。

  • データベースが予想外に大きくなる可能性があります。スペースが問題になる場合があります。たとえば、SQLServer Expressでは、4GBの制限があります。

  • たとえば、SQLServerからOracleに切り替えると、データの移行が面倒になる場合があります

  • クエリは非常に遅くなる可能性があり、データベースの負荷が高くなります

  • イメージがファイルシステム上にあり、他のアプリケーションが異なるデータベースを使用している場合、他のアプリケーションとの相互運用性が向上します。また、それらに直接アクセスでき、データベースツールは必要ありません。

  • 一般的に悪いパフォーマンス

  • とにかくデータベースから画像を取得する場合、おそらく一時ファイルを作成する必要があります。それは不要です。

これらの欠点は、データベースに保存されているイメージへのパスをファイルシステムと同期させておくコストをはるかに上回ります。データベースに画像を保存した方が良い特別なケースはほとんどありません。


11

SQL Server 2005とNTFSファイルシステム(Microsoft)を調査して、CRUDのパフォーマンスを比較します:BLOBとBLOBの比較。この調査は、Webアプリケーションでも行われました。別のデータベース(MySQL)をリストしましたが、PHPサイトにWindows Serverを使用していないと仮定します。したがって、誰かが異なるテクノロジーについて同様の研究を行った場合は興味深いでしょう。

ファイルのサイズに依存することがわかりました。SQL Serverは256K以下の(2倍優れた)BLOBを優先し、ファイルシステムは1MB +のファイルを優先します。この調査のファイルシステムは、データベースよりも断片化をよく処理するため、これらのファイルを絶えず更新している場合や、このシステムが時間とともに成長する場合、断片化はファイルシステムがより良い仕事をする大きな要因になります。

これらのファイルを管理するサイトの責任を判断する必要があります。保険金請求エージェントが事故の写真をアップロードするためにサイトを構築している場合、トランザクションを制御し、それらのファイルがサーバー上にあることを確認することをお勧めします。優れたデータベースがこれをあなたのためにやってくれるので、開発者として、あなたはプレッシャーを加えました。

設計時には、レプリケーション、バックアップ、災害復旧、断片化、ディスクの残り容量、および長期にわたるパフォーマンスを考慮する必要があります。これは、以前のバージョンのSQL Serverに関する1つの研究であり、他のデータベースメーカーと同様に、大きなファイルとバイナリを扱うことは大きな競争の場であると推測しています。


統合ソリューションを検討することもできます。たとえば、SQL ServerにはFILESTREAMRemote Blob Storeがあります。
フェルナンドコレイア

4

膨大な数のイメージを作成する場合、それらをデータベースに保存すると、ファイルシステムレベルでiノードが不足する問題を解消できる場合があります。

しかし、この問題は、より適切なファイルシステムを使用し、組織上のそのファイルシステムで推奨されるあらゆる手段を使用することで解決するのが最善です。

そうしないと、データベースに画像を保存するとリソースが完全に無駄になります。あなたが言ったようにパスを保存します。

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