web-dev-qa-db-ja.com

画像をファイルとして保存するか、Webアプリのデータベースに保存しますか?

私の質問はかなり一般的なものであり、100%の回答がないかもしれないことは知っています。私はASP .NET Webソリューションを構築しています。これには、多くの写真と、できればかなりのトラフィックが含まれます。パフォーマンスを達成したいのです。

データベースまたはファイルシステムに画像を保存する必要がありますか?答えに関係なく、特定の方法を選択する理由に興味があります。

ありがとう、ステファン

[〜#〜] duplicate [〜#〜]DBに画像を保存する-はい、またはいや?画像をファイルシステムに保存する方法少数の画像を保存する:blobまたはfs? およびおそらく他のいくつか。


コメント:多くの良い答えをありがとう。 100%のデータベース駆動型ソリューションを持つというアイデアが気に入っても、ファイルベースのソリューションを選びます。今日、私がデータベースなどでやりたいことをする良い解決策があるように思えますが、それをしない理由がいくつかあります。

  • ホスト型ソリューションになります。大量のストレージ(10GB)がありますが、データベース用に300MBしかありません。 DBに追加のストレージが必要な場合は、費用がかかります。

  • 私はDBの専門家ではなく、DBの設定も管理していません。 DBベースのソリューションでは、カスタム構成が必要になる場合があります。

独自のサーバーでサイトを実行するために移動する場合は、DBベースのソリューションを検討できます。ありがとう、ステファン

119
StefanE

画像をファイルシステムに保存し、画像の場所をデータベースに保存します。

どうして?なぜなら….

  1. 写真を静的ファイルとして提供できます。
  2. 写真を取得するために、データベースアクセスやアプリケーションコードは必要ありません。
  3. 画像を別のサーバーから提供して、パフォーマンスを向上させることができます。
  4. データベースのボトルネックを軽減します。
  5. データベースは最終的にデータをファイルシステムに保存します。
  6. ファイルシステムに保存すると、画像を簡単にキャッシュできます。
170
Akbar ibrahim

最近開発したプロジェクトでは、データベーステーブルの画像列として画像(およびすべての種類のバイナリドキュメント)を保存しました。

データベースにファイルを保存する利点は、データベース(=メタデータ)とハードディスク(=ファイルストレージ)間の同期が組み込まれていないため、レコードが削除されても、ハードディスク上の参照されていないファイルにならないことは明らかです手動でプログラムする必要があります。

今日の技術を使用して、SQL Server 2008のFILESTREAM列に画像を保存することをお勧めします(少なくとも次のプロジェクトではこれを行います)。データベースにデータを保存する利点と、個別のファイルに大きなバイナリ広告によると少なくとも;))

11
devio

格言は常に「ファイルシステムのファイル、データベースのファイルメタデータ」でした

7
Matt Darby

ファイルをファイルとして保存する方が良い。異なるデータベースは異なる方法でBlobデータを処理するため、バックエンドを移行する必要がある場合、問題が発生する可能性があります。

Impagesを提供する場合、サーバー上にすでに存在するファイルに<img src =を指定すると、データベースフィールドから一時ファイルを作成して<imgタグを指すよりも速くなる可能性があります。

私はあなたの質問をグーグルし、コメントを読んでこの答えを見つけました http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html

6
sparklewhiskers

私は通常、データベースにバイナリファイルがあるのが好きです:

  • データの整合性:参照されていないファイル、ファイルに関連付けられていないデータベース内のパスはありません
  • データの一貫性:データベースダンプを取得するだけです。 no "このデータディレクトリをtargzするのを忘れました。"
6
chburd

データベースにイメージを保存すると、単一のイメージを提供するためのDBオーバーヘッドが追加され、そのレベルまで拡大した場合に代替ストレージ(S3、Akami)にオフロードするのが難しくなります。それらをデータベースに保存すると、今すぐ移動する必要があるのはDBだけなので、アプリを別のサーバーに簡単に移動できます。

ディスクにイメージを保存すると、代替ストレージに簡単にオフロードでき、イメージを静的要素にするため、WebアプリでHTTPヘッダーをいじってイメージをキャッシュ可能にする必要がありません。欠点は、アプリを別のサーバーに移動した場合、画像を移動することも忘れないでください。簡単に忘れられるもの。

4
Adam Hawes

Webベースのアプリケーションの場合、画像を保存するためにファイルシステムを使用することでパフォーマンスが向上します。そうすることで、アプリケーション内の複数のレベルで画像のキャッシュを簡単に実装できます。データベースに画像を保存することにはいくつかの利点がありますが、ほとんどの場合、これらの利点はクライアントベースのアプリケーションにあります。

3
Dillie-O

これまでの良い答えにさらに追加するだけです。 Webレベルmaybeとデータベースレベルの両方からキャッシュの利点を得ることができます。データベース内の画像。

データベースについては、関連するテキストデータに関連して画像を保存する方法と、データベースに特定のクエリへの画像へのアクセスができる場合、これを達成できると思いますクエリをキャッシュすることができます(ただし、理論上はその部分については気軽に否定してください)

Web側では、質問にasp.netがタグ付けされているので、httpハンドラーを使用して画像を提供するルートに進むと思います。その後、フレームワークのすべての利点を自由に利用でき、イメージのキーをhttpハンドラーに渡すだけで、ドメインロジックをよりクリーンに保つことができます。

0
MotoWilliams