2009-04-03 31 views
22

可能性の重複:
Storing Images in DB - Yea or Nay?イメージをデータベースに保存する必要がありますか?

こんにちは瞬間

は私のウェブサイト上の各企業は、彼らが自分のプロフィールに追加することができます1枚の絵を持っています。 私はそのイメージをデータベースに保存しました....その会社のロゴ。

今、私は彼らがもっと写真を追加できるようにしたいと思います。今私はそれをすべてデータベースに保存しなければならないのか、それともフォルダに保存するのか分からないのですか?私はフォルダが良くなると思う理由を

理由は、派手な銀色の光でそんなに素敵な記事があるので、ちょっと私が使用できることを特長としていますが、それらのすべてが唯一のフォルダに保存されている画像に応じます。

と私は、私が代わりに画像検索のためのフォルダを使用する例のデータベースを見て、コードを変更するために、そのハードTHAT良いおりませんので。

私はこのようなものを私のウェブサイトに追加したいと思います(画像を参照してください)。 イメージがデータベースに保存されたときにこれを行う方法に関する私のコード例はありますか?私はVB.netでASP.NETを使用しています。 Click here to view what i am talking about

任意のアイデアの男?

よろしく エティエンヌ

答えて

13

私は最近両方の方法を実行しました。私はDBにそのプロパティを保持しながら画像を格納するディレクトリメソッドを使用することを好む。

主な理由:私はクライアント用にウェブサイトを作った。フォトギャラリーセクションがあり、パブリックサイトから閲覧できる新しい写真をアップロードすることができました。私のクライアントは、アップロードする前に自分のイメージを最適化するつもりはなかった。ですから、基本的に.jpgはすべて1MB以上でした。 DBに保存された画像を更新する機能を追加しましたが、一度に1つのレコードを完了する必要がありました。

画像をディレクトリに保存している間に同じことが起こった場合、ファイルをローカルに保存し、最適化してサーバーに戻すことができます。

Here is an example

13

私は、フォルダのために行くと思います。 Sttorage領域を使い果たした場合(他のディスクに移動して再ポイントするだけ)、他のアプリケーション(例:Silverlight)でより柔軟に対応できます。私は、保護されなければならないファイルに対してのみDBを使用したいと思います。

+1

「安全」とは、DBに格納する意味ですか? – IrishChieftain

+2

DBが効果的に保護されていると仮定すると、余分なレイヤーを提供します。攻撃者は、SQLに格納されているイメージを識別し、サーバー、ユーザー名/パスワード、表を識別する必要があります。感染したマシン上のファイルシステムをスキャンするだけでは結果が得られず、悪い書き方のWebサイトではHTTP要求テクニックでファイルが公開されることはありません(ファイルのダウンロードなど)。 SQL Serverが別個のマシン/ネットワーク上にある場合は、さらに効果的です。 –

3

私が一般的に使用するアプローチは、イメージをフォルダにコピーし、相対URLをデータベースに保持することです。この方法の欠点は、誰かが画像を削除した場合、ページをレンダリングするたびにチェックしない限り、Webページに「画像が見つかりません」という結果に終わることです。

2

私のサイトにも同じ質問がありました。私はフォルダの実装を使用することに決めました。なぜなら、データベースを使用する場合は、写真だけをバックアップするときに、データベース全体をバックアップする必要があるからです。一方、ディレクトリ構造を維持して、 。

別個のもの私の友人、大切に!あなたは絶対にDBに格納されていない、サイトのアプリ自体の一部としてこれをしたい任意の通常のサイトについては

5

。 Webサイトには、可搬性を保つために、できるだけ自己完結型にする必要があります。また、DBへのラウンドトリップを追加しないでください(キャッシングが可能な場合でも)だけが良いことです。 Webサーバーは非常にのイメージファイルを提供しています。

しかし、私は個人的に画像を動的に作成し、第二の管理アプリケーションを介してサイトに利用可能とされるアプリに取り組んでいます。明らかに、イメージを保守して安全に保つために、これらはDB形式でバックアップする必要があります。

かいつまんで、どこの画像は、あなたがDBに保存する必要があるとしている(つまり、彼らはコンテンツだ、彼らはセキュリティを必要とする、またはそれらがダイナミックだ)ビジネス価値を持っています。彼らは静的で自明なところでウェブサイトをウェブサイトにしましょう。

+0

動的に作成されている場合は、なぜそれらを保存するのですか? –

+1

再利用のために - 毎回同じものを作成するよりも現存するイメージを使用するほうがずっと安価です – annakata

1

フォルダを使用する利点は、データベースからBLOBをフェッチして通常のストリームに変換するカスタムハンドラを持つ必要がないことです。また、異なる場所からホストする方が簡単で、データベースサーバーの負担を軽減できます。

パス名の保存には注意が必要です。相対パス名はURLとしてよりよく機能し、格納場所、提供方法などの柔軟性とスケーリングを可能にします。

0

私は両方とも行きます。

まず、すべてのイメージをデータベースにBLOB列として格納します。そうすることで、イメージがデータベースのバックアップに常に含まれることを確実にすることができます。

次に、ファイルをフォルダにコピーします。これにより、毎回データベース(画像ファイル用)の照会を避けることができます。ファイルのディスクバックアップ操作に含まれません

  • ファイルが破損に起因して失われたように
    • として単独でのフォルダに格納することは意味を持っているかもしれ

    これまでのところ、当社の顧客のプロジェクトのすべては、同じアプローチを取っています私たちはさまざまな問題に遭遇しましたが、アップロードされたファイルは失われませんでした。 (私たちは約100GBのアップロードされた文書を話している)。

    注意は、次のを見てみたいことがあります。

    1. データベースとフォルダの両方でそれを行う、ファイルが更新されるたびに/交換することを確認してください。それ以外の場合は、矛盾します。
    2. ファイルの情報を格納する別のテーブルが必要な場合があります。 (1)ファイル名(2)ファイルタイプ(3)ファイルサイズ/ MIMEタイプ
    3. データを格納するテーブルを分割したい場合があります。私たちの練習は、テーブルが2GBに達すると、別のテーブルを作成します。適切に設計されていれば、適切なテーブルを見つける上で問題はありません。

    これが役に立ちます。この上

  • 4

    つの思考:

    1. ファイルシステムを使用してください。しかし、いずれかのフォルダが画像で過負荷にならず、管理しなければならない悪夢のようになるように、計画を十分に設計してください。たとえば、識別子の最初または最後の文字、または後続の位置記法を使用してそれをツリーすることができます。あなたの走行距離は変化するので、スキームがあなたのデータセット(画像)のサイズに合っていることを確認してください。 20枚の画像しか管理していない場合は、詳細な長さに進む必要はありません。

    2. SQL Server 2008を使用します。これにはfilestreamという新しいデータ型がありますが、イメージをファイルシステムに保存しますが、標準のデータベースクエリで取得できます。詳細については、http://msdn.microsoft.com/en-us/library/cc949109.aspxを参照してください。

    これらは排他的な選択肢ではありませんが、非常に少なくとも、私はあなたがファイルシステムベース・スキームを使用してではなく、保存のうち、より良いパフォーマンスを得るだろうという純然たる事実のためにオプション#1をお勧めしますデータベースからブロブを読み取ること。

    4

    私は、システムフォルダ内の画像を保存すると最良の方法だと思います。
    DBとクエリを使用すると、いくつかのオーバーロードが発生し、DBトランザクションは通常重くなり、サーバーに負荷がかかります。
    あなたのフォルダに画像を保存し、URLをDBに入れるだけで、アプリの読み込みに適しています。
    しかし、DBの利点は、あなたの画像をバックアップすることができるということです。


    私の提案:画像をフォルダに保存してください。必要なのは、システムI/O操作について知ることだけです。

    2

    AFAIK、flickr.comは、dbに格納されている参照、メタデータなどと同様にフォルダ/ファイルサーバと一緒に移動します。 flickr architecture

    関連する問題