2010-12-06 7 views
10

私は相当量の画像を扱うプロジェクトを実装しています。以下の2つのアプローチの短所/長所が何であるか、あなたの意見ではイメージデータをMySQLデータベースに保存していますか?

私はいくつかの文字列プロパティや画像などの項目の何千、各項目を格納する必要が
    • アプローチ1:ID(整数)
    • MyISAMテーブルあなたは画像を保存する方法を
    • として
    • 各項目ディレクトリとID.jpg
    • として指定された各画像の中に画像を保存
    • アプローチ2:バイナリBLOBとしてデータベースに画像を保存

私は画像を直接アクセスすることができ、それはアプローチ2を使用して

<img src="same_directory/10.jpg" /> 

それだアプローチ1を使用して、私はまだ上記のHTMLを使用しますが、本当のを返しますPHPスクリプトへのJPGへのアクセスをリダイレクトする必要がありますすることができますDBからの画像。

パフォーマンス面ではどちらが速いと思いますか?

は、私は、画像データを使用してデータベースを乱雑には真の価値がありませんように私は、最初のアプローチを使用するように誘惑されています。1.

+2

一般に、大きなBLOBをデータベースに格納すると、実際にはパフォーマンスが低下します。すべての画像が非常に小さいファイルであれば、それほど悪くはありません。 – Orbling

+0

すべての画像がjpgでない場合は、データベースに保存する前に圧縮してください。 –

+0

[写真をファイルとして保存するか、Webアプリのデータベースに保存する]の可能な複製?(http://stackoverflow.com/questions/561447/store-pictures-as-files-or-in-the-database-for- a-web-app) – shamittomar

答えて

1

に近づくことに熱心です。 (データベースからデータを取得するだけでも、ディスクから読み込むよりもかなり遅くなります)。

ただし、推奨する方法として、ディスク上のフルパスをデータベーステーブルのイメージに保存したくない場合があります将来の移植性。 (つまり、パスの一部とファイル名を「既知の」ベースフォルダに保存してください)

2

ファイルシステムに保存する方が高速です。

0

イメージファイルをサーバー上のイメージファイルとして保存して、DB負荷を軽減し、サーバーがキャッシュなどを処理できるようにします。 全体的には、実際にはイメージの種類によって異なります。小さなサムネイル(ファイルアイコンなど)はそれほど悪くはありませんが、私はDBに画像全体を保存しません。一般的に私は、ファイルシステムのアプローチが速くなると思います。

+0

少なくとも私の要件のために、アプローチ1が勝者です... – cmancre

0

ウェブブラウザの問題を調査します。 データベースに保存された10枚の画像でページを読み込むとき。ブラウザーはサーバーに新しいhttp要求を送信します。各要求は、DB接続とサーバー側スクリプトを開始します。または、ファイルシステムから静的イメージを読み取るだけです。

もっと速いのは何ですか?

その他の部分 - ファイルシステムまたはデータベースからデータを取得します。データベースにキャッシュを使用しない場合(ただし、10 GBのイメージの場合は、このデータをキャッシュするには10 GBのRAMが必要です)。いずれの場合でも、データベースおよびHTTPサーバーはファイルシステムからデータを読み取ります。しかし、私はHTTPブラウザは、データベースサーバーより速くデータを読み取ると思う。

データベースストレージの欠点は1つだけです。あるサーバーから別のサーバーにデータを移行するのは非常に簡単です。しかし、これはシステムのパフォーマンスにとって重要ではありません。

また、/a/b/c/abc.jpgのようなイメージの作成パスを忘れないでください。大量のイメージの方が速くなり、すべてのイメージを1つのディレクトリに配置します。アプローチ1の

+0

私はディレクトリの細分について言及しませんでしたが、私はすでにそれを念頭に置いています。 – cmancre

5

利点:フラットファイル形式のウェブサーバを取得

  • がより速くなります。
  • ほとんどのウェブホストがこのアプローチに従う可能性があります。
  • フラットファイルストレージの場合、ファイルシステムの方が高速です。アプローチ2の

利点:あなたのすべてのデータを1つの場所に保管されて

  • 、あなたの ウェブサイト/データベースを移行した場合の画像がそこ
  • その/並べ替えが容易になります削除/ etc ...
  • PHPスクリプトを使用して提供する必要があるため、必要に応じてセキュリティーや画像処理 などの追加事項を で実行できます(明らかにthフラットファイルでもありますが、 ディレクトリに画像を残すことでセキュリティをバイパスすることができるようにする必要があります)。

パフォーマンスアプローチ1を検討するのが最善です。

関連する問題