画像/ブロブをデータベースに保存する利点
- 画像の保存は自動的にトランザクションの一部になります
- ファイルシステムをクリーンアップしてデータベースと同期する必要はありません
- 画像へのアクセスは、残りのデータへのアクセスと同じ方法で制御されます
- 気になるバックアップは1つだけです
- データベースは通常、数百万(数十億ではないにしても)のレコードを保存するのに適しています。ファイルシステムでは、いくつかのディレクトリにまたがる巧妙な分布を見つける必要があります。 1つのディレクトリで数百万のファイルを効率的に処理することはできません。
- 一部のワークロードでは、データベースに画像を保存する方が実際には高速である可能性があります。
SQL Serverの場合、Microsoftは実際にこれをテストしました:
http://research.microsoft.com/apps/pubs/default.aspx?id=64525
他のデータベースが同じように動作しても、驚かないでしょう。
短所:
- データベースを作成し、バックアップを大幅に大きくします(データベースの復元にかかる時間を考えてみてください)。
- ファイルシステムは通常、増分バックアップの方が優れています(OracleのRMANを使用している場合を除く)
- 他のアプリケーション(Webサーバー、画像サイズ変更ツール、FTPサーバーなど)から画像にアクセスすることはできません
- Webアプリケーションの負荷分散のために(アプリケーションサーバーの負荷を軽減するために)画像をコンテンツ配信ネットワーク全体に分散させることはできません。
- 一般的な信念は、データベースからの取得が遅くなるということです。
- 一部のデータベースでは、BLOBを取得すると、データベースキャッシュの効率が実際に低下する可能性があります(Oracle、SQL Server、PostgreSQLではそうではありません。MySQLについてはわかりません)