415

そのため、画像をDBに大量に保存するアプリを使用しています。これについてのあなたの見通しはどうですか?私は、DBに直接保存するのではなく、ファイルシステムに場所を保存するタイプです。

長所/短所は何だと思いますか?

4

56 に答える 56

350

私は、多数のTBの画像を管理するいくつかのアプリケーションを担当しています。データベースにファイルパスを保存するのが最適であることがわかりました。

いくつかの問題があります:

  • データベースストレージは通常、ファイルシステムストレージよりも高価です
  • 標準の既製の製品を使用して、ファイルシステムへのアクセスを大幅に高速化できます
    • たとえば、多くのWebサーバーは、オペレーティングシステムのsendfile()システムコールを使用して、ファイルシステムからネットワークインターフェイスに直接ファイルを非同期で送信します。データベースに保存されている画像は、この最適化の恩恵を受けません。
  • Webサーバーなどは、ファイルシステム内の画像にアクセスするために特別なコーディングや処理を必要としません。
  • データベースは、画像とメタデータ間のトランザクションの整合性が重要な場合に勝ちます。
    • dbメタデータとファイルシステムデータ間の整合性を管理する方が複雑です
    • データがファイルシステム上のディスクにフラッシュされたことを保証することは(Webアプリケーションのコンテキスト内で)困難です。
于 2008-08-06T17:40:10.387 に答える
140

As with most issues, it's not as simple as it sounds. There are cases where it would make sense to store the images in the database.

  • You are storing images that are changing dynamically, say invoices and you wanted to get an invoice as it was on 1 Jan 2007?
  • The government wants you to maintain 6 years of history
  • Images stored in the database do not require a different backup strategy. Images stored on filesystem do
  • It is easier to control access to the images if they are in a database. Idle admins can access any folder on disk. It takes a really determined admin to go snooping in a database to extract the images

On the other hand there are problems associated

  • Require additional code to extract and stream the images
  • Latency may be slower than direct file access
  • Heavier load on the database server
于 2008-08-22T16:33:14.163 に答える
99

ファイルストア。Facebookのエンジニアはそれについて素晴らしい話をしました。1つのポイントは、ディレクトリ内のファイルの実際的な制限を知ることでした。

干し草の山の中の針:何十億もの写真の効率的な保管

于 2008-08-20T18:35:15.900 に答える
56

これは少し遠回りかもしれませんが、SQL Server 2008 を使用している (または使用を計画している) 場合は、新しいFileStreamデータ型を確認することをお勧めします。

FileStream は、DB へのファイルの保存に関する問題のほとんどを解決します。

  1. Blob は、実際にはファイルとしてフォルダーに格納されます。
  2. ブロブには、データベース接続またはファイルシステムを介してアクセスできます。
  3. バックアップが統合されています。
  4. 移行は「うまくいく」。

ただし、SQL の「Transparent Data Encryption」は FileStream オブジェクトを暗号化しないため、それを考慮する場合は、それらを varbinary として保存する方がよい場合があります。

MSDN の記事から:

Transact-SQL ステートメントは、FILESTREAM データを挿入、更新、クエリ、検索、およびバックアップできます。Win32 ファイル システム インターフェイスは、データへのストリーミング アクセスを提供します。
FILESTREAM は、NT システム キャッシュを使用してファイル データをキャッシュします。これにより、FILESTREAM データがデータベース エンジンのパフォーマンスに与える影響を軽減できます。SQL Server バッファー プールは使用されません。したがって、このメモリはクエリ処理に使用できます。

于 2008-08-06T20:15:31.230 に答える
39

DB内のファイルパスは間違いなく進むべき道です-大量の画像をDBに保存しようとすると悪夢になったという、TBの画像を使用している顧客からの話を次々と聞いていますが、パフォーマンスへの影響だけでは大きすぎます。

于 2008-08-06T18:07:46.603 に答える
35

私の経験では、最も簡単な解決策は、主キーに従って画像に名前を付けることです。したがって、特定のレコードに属する画像を簡単に見つけることができ、その逆も可能です。しかし同時に、画像についてはデータベースに何も保存していません。

于 2008-08-06T17:59:59.380 に答える
31

ここでの秘訣は、熱狂的にならないことです。

ここで注意すべきことの 1 つは、プロ ファイル システム キャンプの誰も特定のファイル システムを挙げていないということです。これは、FAT16 から ZFS までのすべてが、あらゆるデータベースを簡単に打ち負かすことを意味するのでしょうか?

いいえ。

真実は、多くのデータベースが多くのファイル システムよりも優れているということです。実際の速度についてのみ話している場合でも同様です。

正しい行動方針は、正確なシナリオに対して正しい決定を下すことです。そのためには、いくつかの数値といくつかのユース ケースの見積もりが必要になります。

于 2008-08-31T17:54:01.417 に答える
30

参照整合性と ACID 準拠を保証しなければならない場所では、データベースに画像を保存する必要があります。

データベースに保存されている画像とその画像に関するメタデータが同じファイルを参照していることをトランザクション的に保証することはできません。つまり、ファイルシステム上のファイルが、メタデータと同時に、同じトランザクションでのみ変更されることを保証することは不可能です。

于 2009-02-19T21:28:48.513 に答える
28

他の人が言っているように、SQL 2008にはファイルストリームタイプが付属しており、ファイル名または識別子をポインタとしてデータベースに格納し、画像をファイルシステムに自動的に格納できます。これは素晴らしいシナリオです。

古いデータベースを使用している場合、それをBLOBデータとして保存している場合は、機能の検索方法でデータベースから何も取得されないため、おそらく最適です。ファイルシステムにアドレスを保存し、その方法で画像を保存します。

そうすれば、ファイルシステムのスペースも節約できます。これは、ファイルシステムの正確な量のスペース、または圧縮されたスペースのみを節約するためです。

また、dbヒットなしでファイルシステム内の生の画像を閲覧できる構造や要素を使用して保存したり、ファイルを別のシステム、ハードドライブ、S3、または別のシナリオにまとめて転送したりすることもできます。プログラムを維持しますが、ストレージを増やそうとするときにデータベースからイメージを取り出そうとしても、ほとんどヒットすることなく、構造を維持します。

おそらく、一般的にヒットする画像のURLに基​​づいてキャッシュ要素をWebエンジン/プログラムにスローできるので、そこにも自分自身を保存できます。

于 2008-08-30T09:50:23.850 に答える
27

頻繁に編集されない小さな静止画像 (数メガ以内) は、データベースに保存する必要があります。この方法には、容易な移植性 (イメージがデータベースと共に転送される)、容易なバックアップ/復元 (イメージがデータベースと共にバックアップされる)、優れたスケーラビリティ (何千もの小さなサムネイル ファイルを含むファイル システム フォルダーは、スケーラビリティの悪夢のように聞こえる) など、いくつかの利点があります。自分)。

データベースから画像を提供するのは簡単です。DB サーバーから返されたバイト配列をバイナリ ストリームとして提供する http ハンドラーを実装するだけです。

于 2008-08-06T18:46:49.270 に答える
26

このトピックに関する興味深いホワイト ペーパーを次に示します。

BLOB にするか BLOB にしないか: データベースまたはファイルシステムのラージ オブジェクト ストレージ

答えは「場合による」です。確かに、それはデータベース サーバーとそのブロブ ストレージへのアプローチに依存します。また、BLOB に格納されているデータの種類と、そのデータへのアクセス方法によっても異なります。

小さいサイズのファイルは、データベースをストレージ メカニズムとして使用して効率的に保存および配信できます。大きなファイルは、特に頻繁に変更/更新される場合は、おそらくファイル システムを使用して保存するのが最適です。(ブロブの断片化は、パフォーマンスに関して問題になります。)

ここで、覚えておくべき追加のポイントがあります。データベースを使用して BLOB を保存することを支持する理由の 1 つは、ACID コンプライアンスです。ただし、テスト担当者がホワイト ペーパーで使用したアプローチ (SQL Server の Bulk Logged オプション) は、SQL Server のスループットを 2 倍にし、ACID の「D」を効果的に「d」に変更しました。トランザクションの最初の書き込み。したがって、完全な ACID 準拠がシステムの重要な要件である場合は、ファイル I/O とデータベース BLOB I/O を比較するときに、データベース書き込みの SQL Server スループットの数値を半分にします。

于 2008-09-16T20:28:48.007 に答える
25

まだ誰も言及していないことの1つですが、間違いなく注目に値するのは、ほとんどのファイルシステムにも大量の画像を保存することに関連する問題があるということです。たとえば、上記のアプローチを採用し、主キーにちなんで各画像ファイルに名前を付ける場合、ほとんどのファイルシステムでは、非常に多くの画像に到達したときにすべての画像を1つの大きなディレクトリに配置しようとすると、問題が発生します(たとえば、数十万または数百万)。

これに対する一般的な解決策は、それらをハッシュしてサブディレクトリのバランスの取れたツリーにすることです。

于 2008-08-20T18:25:12.540 に答える
22

誰も言及していないことは、DBがアトミックアクション、トランザクションの整合性を保証し、同時実行性を処理するということです。参照の整合性でさえ、ファイルシステムのウィンドウの外にあります-それで、ファイル名が本当にまだ正しいことをどうやって知るのですか?

ファイルシステムに画像があり、新しいバージョンを書いているとき、またはファイルを削除しているときに誰かがファイルを読んでいる場合、どうなりますか?

BLOBを使用するのは、管理(バックアップ、レプリケーション、転送)も簡単だからです。彼らは私たちのためにうまく機能します。

于 2008-11-28T06:33:53.797 に答える
20

画像へのファイルパスのみをデータベースに保存する場合の問題は、データベースの整合性を強制できなくなることです。

ファイルパスが指す実際のイメージが使用できなくなった場合、データベースに無意識のうちに整合性エラーが発生します。

画像は求められている実際のデータであり、ある種のファイルシステムとインターフェイスする必要がなく(ファイルシステムに個別にアクセスする場合)、1つの統合データベースで簡単に管理できます(画像が突然消えることはありません)。画像が突然「消える」可能性があります)、BLOBなどとして直接保存します。

于 2009-04-08T16:35:09.563 に答える
17

私が以前働いていた会社では、Oracle 8i (当時は 9i) データベースに 1 億 5,500 万の画像を保存していました。7.5TB相当。

于 2008-08-06T18:37:17.573 に答える
14

通常、私は、インフラストラクチャ(データベース)の最も高価で拡張が難しい部分を取り上げて、すべての負荷をそれにかけることに強く反対しています。一方、特に複数のWebサーバーがあり、何らかの方法でデータの同期を維持する必要がある場合は、バックアップ戦略が大幅に簡素化されます。

他のほとんどのものと同様に、それは予想されるサイズと予算に依存します。

于 2008-08-06T17:42:21.787 に答える
13

すべての画像を SQL2005 blob フィールドに格納するドキュメント イメージング システムを実装しました。現時点では数百 GB ありますが、優れた応答時間とパフォーマンスの低下がほとんどまたはまったく見られません。さらに、規制遵守のために、新しく投稿されたドキュメントを標準の NTFS ファイル システムとして公開する光ジュークボックス システムにアーカイブするミドルウェア層があります。

特に次の点に関して、結果に非常に満足しています。

  1. レプリケーションとバックアップの容易さ
  2. ドキュメントのバージョン管理システムを簡単に実装する機能
于 2008-10-26T17:55:01.187 に答える
11

これがWebベースのアプリケーションである場合、AmazonのS3やNirvanixプラットフォームなどのサードパーティのストレージ配信ネットワークに画像を保存することには利点があります。

于 2008-08-06T17:52:51.937 に答える
11

前提: アプリケーションは Web 対応/Web ベース

誰もこれについて実際に言及していないことに驚いています...専門家である他の人に委任してください->サードパーティの画像/ファイルホスティングプロバイダーを使用してください。

次のような有料のオンライン サービスにファイルを保存します。

これについて話している別の StackOverflow スレッドがここにあります

このスレッドでは、サード パーティのホスティング プロバイダーを使用する必要がある理由について説明します。

それだけの価値があります。彼らはそれを効率的に保管します。サーバーからクライアント要求などにアップロードされる帯域幅はありません。

于 2009-05-18T13:18:53.097 に答える
10

SQL Server 2008 を使用しておらず、データベースに特定のイメージ ファイルを配置する確固たる理由がある場合は、「両方」のアプローチを採用して、ファイル システムを一時キャッシュとして使用し、データベースをマスター リポジトリとして使用できます。 .

たとえば、ビジネス ロジックは、画像ファイルを提供する前にディスク上に存在するかどうかを確認し、必要に応じてデータベースから取得できます。これにより、複数の Web サーバーの機能が得られ、同期の問題が少なくなります。

于 2008-09-02T14:01:36.467 に答える
7

保存する画像の数とサイズによって異なります。私は過去にデータベースを使用して画像を保存しましたが、私の経験はかなり良好です。

IMO、データベースを使用して画像を保存することの長所は、

A.画像を保持するためにFS構造は必要ありません
。B。より多くのアイテムを保存する場合、データベースインデックスはFSツリーよりも優れたパフォーマンスを発揮します
。C。スマートに調整されたデータベースはクエリ結果のキャッシュに優れたパフォーマンスを発揮します
。D。バックアップは簡単です。また、レプリケーションが設定されていて、コンテンツがユーザーの近くのサーバーから配信される場合にもうまく機能します。このような場合、明示的な同期は必要ありません。

イメージが小さくなり(たとえば<64k)、データベースのストレージエンジンがインライン(レコード内)BLOBをサポートする場合、間接参照が不要になるため、パフォーマンスがさらに向上します(参照の局所性が実現されます)。

少数の巨大なサイズの画像を扱う場合、画像を保存することは悪い考えかもしれません。画像をdbに保存する際の別の問題は、作成、変更日などのメタデータをアプリケーションで処理する必要があることです。

于 2008-09-05T10:54:06.813 に答える
7

これがどれだけ「現実世界」の例であるかはわかりませんが、現在、カードの画像など、トレーディングカードゲームの詳細を保存するアプリケーションがあります。データベースのレコード数は現在までにわずか2851レコードですが、特定のカードが複数回リリースされ、代替のアートワークがあるという事実を考えると、アートワークの「プライマリスクエア」をスキャンしてから動的にスキャンする方が、実際にはサイズ的に効率的でした。要求に応じて、カードの境界線とその他の効果を生成します。

この画像ライブラリの元の作成者は、リクエストに基づいて画像をレンダリングするデータアクセスクラスを作成しました。これは、表示や個々のカードに対して非常に高速です。

これにより、新しいカードがリリースされたときの展開/更新も簡単になります。画像のフォルダー全体を圧縮してパイプに送信し、適切なフォルダー構造が作成されるようにする代わりに、データベースを更新して、ユーザーに再度ダウンロードしてもらうだけです。これは現在最大56MBのサイズであり、これは素晴らしいことではありませんが、将来のリリースに向けてインクリメンタルアップデート機能に取り組んでいます。さらに、アプリケーションの「画像なし」バージョンがあり、ダイヤルアップを使用している場合は、ダウンロードを遅らせることなくアプリケーションを入手できます。

このソリューションは、アプリケーション自体がデスクトップ上の単一のインスタンスとしてターゲットにされているため、これまでうまく機能してきました。このすべてのデータがオンラインアクセス用にアーカイブされているWebサイトがありますが、私はこれに同じソリューションを使用することは決してありません。画像に対して行われるリクエストの頻度と量に合わせて拡張できるため、ファイルアクセスが望ましいことに同意します。

うまくいけば、これはあまり口論ではありませんが、私はこのトピックを見て、比較的成功した中小規模のアプリケーションからの洞察を提供したいと思いました。

于 2008-08-20T18:42:14.400 に答える
7

SQL Server 2008 は、両方の長所を備えたソリューションを提供します: filestream データ型

通常のテーブルのように管理し、ファイル システムのパフォーマンスを備えています。

于 2008-08-28T21:37:10.623 に答える
7

最近、PDF/Word ファイルを MySQL テーブルに格納する PHP/MySQL アプリを作成しました (これまでのところ、ファイルあたり 40MB の大きさです)。

長所:

  • アップロードされたファイルは、他のすべてのものと一緒にバックアップ サーバーに複製されます。個別のバックアップ戦略は必要ありません (安心してください)。
  • uploads/ フォルダーを用意して、すべてのアプリケーションにその場所を伝える必要がないため、Web サーバーのセットアップは少し簡単になります。
  • 編集にトランザクションを使用してデータの整合性を改善できるようになりました - 孤立したファイルや欠落したファイルについて心配する必要はありません

短所:

  • テーブルの 1 つに 500MB のファイル データがあるため、mysqldump には非常に長い時間がかかります。
  • ファイルシステムと比較すると、全体的にメモリ/CPU効率があまり良くありません

私の実装は成功と言えます。バックアップ要件を処理し、プロジェクトのレイアウトを簡素化します。アプリを使用する 20 ~ 30 人のユーザーにとって、パフォーマンスは問題ありません。

于 2008-12-08T04:31:54.727 に答える
6

私の経験では、データベースに保存された画像と、パスがdbに保存されたファイルシステム上の画像の両方の状況を管理する必要がありました。

最初のソリューションであるデータベース内のイメージは、データ アクセス レイヤーがデータベース オブジェクトのみを処理する必要があるため、やや「クリーン」です。ただし、これは低い数値を処理する必要がある場合にのみ適しています。

バイナリ ラージ オブジェクトを処理するときのデータベース アクセス パフォーマンスは明らかに低下しており、データベースのサイズが大きくなり、再びパフォーマンスが低下します。通常、データベース スペースはファイル システム スペースよりもはるかに高価です。

一方、大きなバイナリ オブジェクトをファイル システムに格納すると、データベースとファイル システムの両方を考慮する必要があるバックアップ プランが必要になります。これは、一部のシステムでは問題になる可能性があります。

ファイル システムを使用するもう 1 つの理由は、画像データ (またはサウンド、ビデオなど) をサード パーティのアクセスと共有する必要がある場合です。 「私の Web ファームは、バイナリ データを取得するためのデータベース アクセスが単純に不可能な方法で行われました。そのため、選択を迫る設計上の考慮事項が存在する場合もあります。

また、この選択を行う際に、バイナリ オブジェクトにアクセスするときにアクセス許可と認証を処理する必要があるかどうかも考慮してください。通常、これらの要件は、データが db に格納されている場合に、より簡単な方法で解決できます。

于 2008-09-02T07:20:58.020 に答える
4

以前のプロジェクトでは、イメージをファイル システムに保存しましたが、バックアップ、レプリケーション、およびファイル システムがデータベースと同期しなくなるという問題が発生しました。

私の最新のプロジェクトでは、画像をデータベースに保存し、それらをファイルシステムにキャッシュしていますが、非常にうまく機能しています。これまで問題はありませんでした。

于 2009-12-16T14:29:05.767 に答える
4

私はかつて画像処理アプリケーションに取り組んでいました。アップロードした画像は、/images/[今日の日付]/[ID 番号] のようなディレクトリに保存しました。しかし、画像からメタデータ (exif データ) を抽出し、それをタイムスタンプなどと共にデータベースに保存しました。

于 2008-08-20T18:51:56.110 に答える
3

次に、ファイルパスに関する推奨事項。私は大規模なアセットコレクションを管理する必要のあるいくつかのプロジェクトに取り組んできましたが、DBに直接保存しようとすると、長期的に苦痛とフラストレーションが生じました。

それらをDBに保存することに関して私が考えることができる唯一の本当の「プロ」は、個々の画像アセットを簡単にする可能性です。使用するファイルパスがなく、すべての画像がDBから直接ストリーミングされる場合、ユーザーがアクセスしてはならないファイルを見つける危険はありません。

ただし、Webにアクセスできないファイルストアからデータをプルする中間スクリプトを使用すると、より適切に解決できるようです。したがって、DBストレージは本当に必要ではありません。

于 2008-08-06T17:51:00.053 に答える
3

巷では、あなたのデータベースがそれを実行できることを証明しようとしているデータベース ベンダーでない限り (たとえば、Microsoft が Terraserver が SQL Server に膨大な数の画像を格納していると自慢しているとしましょう)、それはあまり良い考えではありません。別の方法として、画像をファイル サーバーに保存し、パスをデータベースに保存する方がはるかに簡単なのに、わざわざわざわざする必要はありません。ブロブ フィールドは、SUV のオフロード機能のようなものです。ほとんどの人はそれらを使用しません。通常はトラブルに巻き込まれる人がいますが、楽しむために使用する人もいます。

于 2008-08-06T21:19:16.500 に答える
3

画像をデータベースに保存すると、画像データは最終的にファイル システムのどこかに保存されますが、直接アクセスできないように隠されます。

+ves:

  • データベースの整合性
  • イメージが追加または削除されたときにファイルシステムの同期を維持することを心配する必要がないため、管理が簡単です

-ves:

  • パフォーマンスの低下 -- 通常、データベースのルックアップはファイルシステムのルックアップよりも遅くなります
  • 画像を直接編集することはできません(トリミング、サイズ変更)

どちらの方法も一般的であり、実践されています。長所と短所をご覧ください。いずれにせよ、デメリットを克服する方法を考える必要があります。データベースに保存するということは、通常、データベース パラメータを微調整し、何らかのキャッシュを実装することを意味します。ファイルシステムを使用するには、ファイルシステムとデータベースを同期させる何らかの方法を見つける必要があります。

于 2009-05-18T06:36:42.107 に答える
2

私は、一部の顧客が数百ギガバイトのドキュメントを保存するエンタープライズドキュメント管理システムのリード開発者です。それほど遠くない将来のテラバイト。このページに記載されている多くの理由に加えて、アーカイブという別の理由から、ファイルシステムアプローチを使用しています。

お客様の多くは、光ディスクへのストレージや非独占的な形式でのストレージなど、業界固有のアーカイブルールに準拠する必要があります。さらに、NASデバイスにディスクを追加するだけの柔軟性があります。SQL Server 2008のファイルストリームデータ型を使用している場合でも、データベースにファイルを保存している場合は、アーカイブオプションが大幅に狭くなります。

于 2008-08-30T10:15:53.227 に答える
1

Webサーバー(使用していると想定しています)は、データベースではなく画像を処理するように設計されています。したがって、私は反対側に強く投票します。

パスだけ(そしておそらくファイル情報も)をデータベースに保存します。

于 2008-08-06T17:40:57.767 に答える
1

私は個人的に大きなデータをデータベースの外に保存します。

長所:すべてを1つに保存してください、データファイルへの簡単なアクセス、簡単なバスクアップ短所:データベースのパフォーマンスの低下、多くのページ分割、データベースの破損の可能性

于 2008-08-06T17:41:26.143 に答える
1

画像をテーブルに保存する唯一の理由は、各テーブル(または作業範囲ごとのテーブルのセット)が一時的であり、ワークフローの最後に削除されるためです。長期的なストレージがある場合は、ファイルパスを保存することを選択します。

また、内部でクライアント/サーバーアプリケーションを操作するため、心配する必要のあるWebインターフェイスがないことにも注意してください。

于 2008-08-20T18:49:45.553 に答える
1

ファイル システムに多数の画像を保存する必要がある場合は、次の点について検討する必要があります。

  • バックアップと復元。どのように画像を同期させますか。
  • ファイルシステムのパフォーマンス。実行内容とファイルシステムによって異なりますが、ハッシュ メカニズムを実装して、1 つのディレクトリに何十億ものファイルが存在しないようにすることをお勧めします。
  • 複製。複数のサーバー間でファイルの同期を維持する必要がありますか?
于 2008-08-22T15:49:19.310 に答える
1

誰かがすでに述べたように、「場合による」。データベース内のストレージがファイルシステムの 1 対 1 の派手な代替品であると想定されている場合、それは最適なオプションではない可能性があります。

ただし、データベース バックエンドが BLOB のシリアル化とストレージだけでなく、追加の値を提供する場合、それは本当に理にかなっています。

PostgreSQLデータベース システムの地理空間拡張として機能するPostGISでのラスター サポートの開発を目的としたプロジェクトであるWKT Rasterをご覧ください。WKT Raster の背後にあるアイデアは、(PostgreSQL システムを使用して) ラスターのシリアル化とストレージの形式を定義することだけではなく、ストレージよりもはるかに重要なことは、SQL からアクセスできるデータベース側の効率的な画像処理を指定することです。簡単に言うと、運用上の重みをクライアントからデータベースのバックエンドに移すことであり、可能な限りストレージ自体に近い場所で行われます。PostGIS としての WKT Raster は、特定のドメインGISのアプリケーション専用です。

より完全な概要については、システムのWeb サイトプレゼンテーション(PDF) を確認してください。

于 2010-02-03T20:39:13.300 に答える
0

SQLを使用してファイルシステムを模倣しようとすることは、一般的に悪い計画です。外部ストレージ用のファイルシステムを使用する場合、最終的には、記述するコードが少なくなり、同等以上の結果が得られます。

于 2008-08-20T18:15:08.490 に答える
0

DBから大量のバイナリデータをネットワーク経由でプルすると、遅延の問題が発生し、拡張性が低下します。

パスをDBに保存し、Webサーバーに負荷をかけてもらいます。これが設計された目的です。

于 2008-08-22T16:08:52.537 に答える
0

画像をファイル システムに保存するもう 1 つの利点は、クライアントに画像をキャッシュさせるために特別なことをする必要がないことです...

...もちろん、ドキュメント ルート (認証バリアなど) 経由で画像にアクセスできない場合を除きます。その場合、コードが送信しているキャッシュ制御ヘッダーを確認する必要があります。

于 2008-08-30T04:27:40.490 に答える
0

覚えておく必要があることの 1 つは、データ セットのサイズです。私は、Dillie-O だけが遠く離れたところからでも的を射ていたと信じています。

小規模でシングル ユーザーの消費者向けアプリの場合は、DB. 私はファイル システム (Program Files 内) を使用する DVD 管理アプリを持っています。これはバックアップする PIA です。彼らがそれらをデータベースに保存するたびに、そのファイルを保存する場所を選択できるようにしたいと思っています。

より大きな商用アプリケーションの場合、私は考えを変え始めます。私は以前、郡書記情報管理アプリケーションを開発した会社で働いていました。画像は、郡が割り当てた機器番号に基づいて [多数のファイルを使用した FS の問題に対処するため] エンコードされた形式でディスクに保存します。これは、DB レコードの前にイメージが存在する可能性があるため (ワークフローにより)、別の面で役立ちました。

ほとんどのものと同様に、「あなたが何をしているかによります」

于 2008-08-29T23:04:07.010 に答える
0

私は両方のソリューションに行きます。つまり、画像をDBに保存する小さなコンポーネント(EJB)と、この画像のサーバーへのパスを開発します。この DB は、新しいイメージまたは元のイメージが更新された場合にのみ更新されます。次に、そのパスもビジネス DB に格納します。

アプリケーションの観点から、私は常にファイル システムを使用し (ビジネス DB からパスを取得します)、これによりバックアップの問題を修正し、パフォーマンスの問題を回避します。

唯一の弱点は、同じ画像を 2 回保存することです...良い点は、メモリが安価であることです。

于 2012-01-26T16:05:51.933 に答える
0

私はファイルシステムのアプローチを採用します。画像を含む DB を作成または維持する必要はありません。長い目で見れば、いくつかの大きな頭痛の種から解放されます。

于 2008-09-02T19:33:44.860 に答える
0

確かにファイルシステム。その後、OS のすべての機能を使用してこれらのイメージを処理できます。バックアップ、Web サーバー、さらには imagemagic などのツールを使用してバッチ変更をスクリプト化することもできます。それらを DB に保存する場合は、これらの問題を解決するために独自のコードを作成する必要があります。

于 2008-08-28T20:12:14.400 に答える
0

イメージ パスを DB に格納し、イメージをファイル システムに格納することを好みます (サーバー間の rsync を使用して、すべてを適切に最新に保ちます)。

ただし、私が行っているコンテンツ管理システムの一部には、いくつかの理由で CMS の画像が必要です。たとえば、可視性の制御 (プレス リリースが公開されるまで資産が保持されるため)、バージョン管理、再フォーマット (一部の CMS は動的にサイズ変更されるため) です。サムネイル) と、画像を WYSIWYG ページにリンクするための使いやすさ。

したがって、私にとっての経験則は、CMS 駆動でない限り、常にアプリケーションのものをファイルシステムに隠しておくことです。

于 2008-09-02T16:15:56.783 に答える
0

主に柔軟性が優れているため、ファイルシステムアプローチを使用します。画像の数が膨大になると、1 つのデータベースでは処理しきれない場合があることを考慮してください。ファイル システムを使用すると、NFS などを使用していると仮定して、ファイル サーバーを簡単に追加できます。

ファイル システム アプローチのもう 1 つの利点は、Amazon S3 をプライマリ ストレージとして使用できる (ファイル パスの代わりにデータベースに URL を保存する) など、いくつかの凝った機能を実行できることです。S3 で障害が発生した場合は、ファイル サーバーにフォールバックします (ファイル パスを含む別のデータベース エントリである可能性があります)。Apache や使用している Web サーバーに適用するためのいくつかのブードゥー教。

于 2008-12-09T19:51:51.343 に答える
0

小さな画像が多数ある場合は、データベースの方が適している場合があります。

多くの小さなサムネイル (それぞれ 2Kb) を持つアプリケーションがありました。それらをファイルシステムに配置すると、ファイルシステムのブロックサイズが原因で、それぞれが 8kb を消費しました。スペースが400%増加!

ブロック サイズの詳細については、次の投稿を参照してください: iPhone ファイル システムのブロック サイズとは何ですか?

于 2011-05-17T09:15:10.423 に答える
0

Teradata を使用している場合は、Teradata Developer Exchange に、LOB と BLOB の読み込みと取得に関する詳細な記事があります。

http://developer.teradata.com/applications/articles/large-objects-part-1-loading

于 2011-09-27T11:34:24.060 に答える
0

私は多くのデジタル ストレージ システムを使用してきましたが、それらはすべてデジタル オブジェクトをファイル システムに格納しています。彼らはブランチ アプローチを使用する傾向があるため、ファイル システムにはアーカイブ ツリーがあり、多くの場合は 2009 年などのエントリの年から始まり、サブディレクトリは月 (8 月などは 8)、次のディレクトリは 11 日などになります。同様に、ファイルにはレコードの永続 ID を使用して名前が付けられます。BLOBS の使用には利点があり、数千または数百万の写真や図を保存するために、化学業界の IT 部門で頻繁に使用されていると聞いています。よりきめ細かなセキュリティ、単一のバックアップ方法、潜在的に優れたデータ整合性、改善されたメディア間検索を提供できます。Oracle は、以前 Intermedia と呼んでいたパッケージ内に、このための多くの機能を備えています (現在は別の名前になっていると思います)。ファイル システムには、XACML や別の XML タイプのセキュリティ オブジェクトなどのシステムを介して提供されるきめ細かなセキュリティを設定することもできます。例については、Fedora Object Store の D Space を参照してください。

于 2009-08-11T11:27:06.173 に答える
0

データのデータベース

ファイルのファイルシステム

于 2009-03-02T07:14:31.100 に答える
-1

一般向けの Web サイトを計画している場合は、どちらのオプションも使用しないでください。コンテンツ配信ネットワーク (CDN) を使用する必要があります。インターネット経由で大量の静的コンテンツを配信する場合、CDN には価格、スケーラビリティ、速度の利点があります。

于 2008-11-04T20:30:44.887 に答える
-1

私はファイルシステムのアプローチを採用します。他の何人かが指摘しているように、ほとんどの Web サーバーは、ファイル パスから画像を送信するように構築されています。データベースから BLOB フィールドを書き込んだり、ストリーミングしたりする必要がなければ、パフォーマンスが大幅に向上します。画像用のファイルシステム ストレージを使用すると、コンテンツが変更されていない場合や、データベースの負荷を制限したい場合に、静的ページを簡単にセットアップできます。

于 2008-08-06T21:45:51.220 に答える
-1

私の小さなアプリケーションには、最終的に約 200 GB の重さの少なくとも 100 万個のファイルがあります。すべてのファイルは、iSCSI 経由で Linux サーバーにマウントされた XFS ファイル システムに置かれています。パスはデータベースに保存されます。ファイルパスとファイル名には、ある種のインテリジェントな命名規則を使用してください。

私見、本来の目的であるファイルシステムを使用して、ファイルを保存します。通常、データベースは、バイナリ データの格納において、標準のファイル システムに勝る利点はありません。

于 2008-09-15T19:27:48.257 に答える
-1

ファイル ストア上のイメージは最善の策であり、データベースにメタ データを格納することでこれを補完します。Web サーバーの観点から見ると、コンテンツを提供するための迅速な方法は、それを直接指定することです。それがデータベース内にある場合-ala Sharepoint-それを引き出したり、ストリーミングしたりするためのADO.Netのオーバーヘッドがあります。

Documentum は肥大化して複雑ではありますが、ファイルが共有上にあり、ファイルをサーバー、SAN、NAS などのディスクに保存する方法を決定できるという点で適切です。Documentum の戦略は、DB 内の主キーに従ってフォルダーとファイル名をエンコードすることにより、ファイルをツリー構造に格納することです。DBは、どのファイルが何であるかを知り、セキュリティを強化するためのリソースになります。大容量システムの場合、このタイプのアプローチは適切な方法です。

メタデータを扱うときは、これも考慮してください。メタデータ コーパスの属性を更新する必要が生じた場合、SQL を使用して更新をすばやく実行できる DB が役に立ちます。他のタグ付けシステムでは、簡単なデータ操作ツールが手元にありません

于 2008-10-02T23:33:46.910 に答える
-1

現在のアプリケーションでは、両方を行っています。ユーザーがレコードに添付する画像を特定したら、ImageMagick を使用して、画面に表示するのに適切なサイズ (私のアプリケーションでは約 300x300) にサイズを変更し、アクセスしやすいようにデータベースに保存します。元のファイルをネットワーク共有に転送して、より高い解像度を必要とするアプリケーション (印刷など) で使用できるようにします。

(他にもいくつかの要因が関係しています。Navision は BMP のみを表示するため、サイズを変更するとストレージ用に BMP にも変換されます。データベースは、画像を表示できると便利なリモート サイトに複製されます。印刷本社でのみ行うため、元のファイルを複製する必要はありません。)

于 2008-09-08T19:51:20.583 に答える
-1

いいえ、ページ分割のためです。基本的に、1KB - n MB の行を定義しているため、データベースのページには多くの空きスペースがあり、パフォーマンスが低下します。

于 2008-08-22T16:48:58.307 に答える