2009-08-05 12 views
14

私はこの点についていくつかの記事を読んでいますが、私の場合は何が最善の解決策であるのかまだ分かりません。

私は新しいWebAppの作成を開始し、バックエンドは約1000万の画像を提供する予定です。 (単一画像の平均サイズ200-500kB
イメージの保存:DBまたはファイルシステム -

マイサイトは100-1000ユーザ同時ににコンテンツや画像を提供します。

私はまた、プロバイダー費用をできるだけ低く抑えたいと思いますが(これは第2の要件です)。 私は、ファイルシステムのスペースがDBサイズのコストと比較して安価であると考えています。

個人的に私は、DB内のすべての私のイメージを持っていることのアイデアを好きしかしどんな提案が本当に理解されるであろう:)

は、私の場合にはDBのアプローチが正しい選択であることを、あなたと思いますか?

+0

http://stackoverflow.com/questions/1212832/most-efficient-way-to-store-a-20-meg-file-in-a-sql-server-の重複2005-image-column – andrewWinn

+2

重複していますか?私は10MBの1/20 - 1/50のjava、mysql、およびimageファイルを使用しています。私の質問は、特定の技術に関連するものではなく、保存する必要のある画像のサイズ/数量に関係します。 – mickthompson

答えて

22

参照してください。これは、代わりにホットなアプリケーションデータをキャッシュする可能性がある場合、DBエンジンがこれらすべてのイメージ(実際には設計されていないタスク)をキャッシュしていることを意味します。

ファイルをOSおよび/またはリバースプロキシにキャッシュされたままにしておけば、より良い結果が得られます。

+0

拡大縮小可能な場合は、エッジサーバーがこれを行うことになっています。エッジサーバーはHTTPトラフィックから動作するため、最初の要求と、タイムアウトの「ちょうど後」に発生する要求のサブセットを除いて、イメージがどこから来たのかは問題になりません。そのことを念頭において、 "全体"イメージを保持するレコードにアクセスせずに、HEADリクエストの正しい情報で応答できるように、データベース層を構造化するのが最適です。ディスクは一般的には高速ですが、データベースを選択しても、すべてのパフォーマンスをあきらめる必要はありません。 –

5

バイナリオブジェクトを扱う場合は、アーキテクチャーのためのドキュメント中心のアプローチに従い、pdfやイメージなどのドキュメントをデータベースに保存しないようにしてください。データベースのあらゆる種類のパフォーマンスの問題が発生すると、最終的にはリファクタリングする必要があります。 。ファイルシステムにファイルを保存し、パスをデータベースのテーブルの中に入れてください。また、データ型をデータベースにシリアライズして保存するために使用するデータ型のサイズには物理的な制限があります。ファイルシステムに格納してアクセスするだけです。

+1

この質問は毎日SOに依頼され続けています。 –

4

あなたの最初の文章では、あなたがこの件に関するいくつかの記事を読んでいると言われていますので、これをカバーする記事へのリンクを入れても構いません。私の経験では、画像の数や画像のサイズまで投稿した内容に基づいて、DBに保存すると、DBのパフォーマンスを犠牲にすることになります。私はそれらをファイルシステムに保存します。

0

イメージングに最適化されたサーバーであるFileNetを使用します。それは非常に高価です。より安い解決策は、ファイルサーバーを使用することです。

大きなファイルをデータベースサーバーに格納しないでください。

他にも言及したように、データベース内の大きなファイルへの参照を格納します。

14

ファイルシステム上に画像を保存するためのいくつかの他の理由:

  • データベースがビジーまたはダウンした場合でも、画像サーバを実行することができます。
  • ファイルシステムはファイルに作られており、非常に効率的です。
  • データベースのデータをダンプすると、バックアップやその他の操作が遅くなります。
  • イメージを提供するために必要なサーバー側コードはありません。古いIIS/Apacheです。
  • 汚れの少ないWebサーバー、または潜在的にCDNを使用すると、より高速にスケールアップできます。
  • データベースを使用せずに関連作業(サムネイルの生成など)を実行することができます。
  • データベースサーバーは、「実際の」テーブルのデータをメモリに保存することができます。このテーブルのデータは、クエリのデータベース速度を取得する場所です。イメージファイルをキャッシュに保存するために貴重なメモリを使用すると、メモリ内の写真インデックスの数が増えているのに対してスピードワイドなものはほとんどありません。
3

どのデータベースをお使いですか? MS SQL Server 2008はFILESTREAMストレージを提供します

は、SQL Server 2008とNTFSファイルシステムの組み合わせを使用してBLOBデータを格納し、効率的にアクセスできるようにします。 BLOBストレージの選択、FILESTREAMデータを使用するためのWindowsとSQL Serverの構成、FILESTREAMと他の機能との組み合わせに関する考慮事項、およびパーティション化やパフォーマンスなどの実装の詳細について説明します。

details

関連する問題