2012-07-11 10 views
7

私は、このアプリケーションでは、ユーザーが月に約6000ファイル(主にpdf、doc、xls)をアップロードしてダウンロードできるようにするという要件があります。データベースのブロブとディスクの保存ファイル

私はこのための最適な解決策を考えていました。問題は、データベースにBLObを使用するのか、これらのファイルを書き込み/読み込むために単純なファイル階層を使用するのかです。

アプリケーションアーキテクチャは、Java 1.6、Spring 3.1、DOJO、Informix 10.Xに基づいています。

私はあなたの経験に基づいてアドバイスを受けています。あなたがシステムをファイルにファイルを格納し、これらのファイルに関連して、データベース内の他のデータを、持っている場合

+0

どのデータベースを使用しますか? –

+0

良い点は、それはInformix 10.Xです –

+1

私は、唯一のポイントプロデータベースは、同時性アクセスと思われる...とにかく、データベースもファイルを使用しています(それらのいくつかは主にRAMを使用しますが、 )。ファイルを直接使用すると、DBリソース(接続、クエリなど)が節約され、 – PEM

答えて

6

は、それがより複雑になります:

  1. バックアップは、個別に行われる必要があります。
  2. トランザクションは別々に実装する必要があります(ファイルシステム操作でも可能です)。
  3. データベースとファイルシステム構造の間の整合性チェックは、そのままではありません。
  4. カスケードなし:ユーザーを削除した結果としてユーザーの画像を削除しません。
  5. まず、データベースからファイルのパスを問い合わせてから、ファイルシステムからファイルのパスを選択する必要があります。

ファイルシステムに適したソリューションは、ファイルに直接アクセスできるようにすることが便利な場合があります。例えば、画像の一部を他の場所にコピーするなどです。もちろん、バイナリデータを格納することで、データベースのサイズが大幅に変更される可能性があります。しかし、いずれの場合でも、両方のソリューションのどこかに、より多くのディスクストレージが必要になります。

もちろん、これは現在利用可能なものより多くのDBリソースを要求することができます。一般に、特にローカルファイルシステムとリモートDBとの間の判断が重要な場合、パフォーマンスが大幅に低下する可能性があります。あなたの場合(毎月6000ファイル)、生のパフォーマンスは問題にはなりませんが、レイテンシは問題ありません。 「最良」の解決策何を求め、それはあなたの評価基準を含めることをお勧めします

9

- スピード、コスト、シンプルさ、メンテナンスなど

ミッコMaunuが与えた答えはお金にほとんどです。私はInformixを20年で使用していませんが、BLOBを扱うときにはほとんどのデータベースが少し遅くなります。特に、BLOBをデータベースに出し入れする手順は遅くなる可能性があります。

特に、Webアプリケーションを使用している場合、アプリケーションサーバーがファイルをデータベースに出し入れするためにかなりの労力を費やし、おそらくはるかに多くのメモリを消費する可能性があるため、通常のページよりもファイル関連のリクエストを完了するのに時間がかかる可能性があります。

これは、中程度の負荷の下でWebサーバーの速度が低下する可能性があります。ドキュメントをデータベースに保存することを選択した場合、問題があるかどうかを確認するためにいくつかのパフォーマンステストを実行することを強く推奨します。このようなソリューションでは、設定に問題が生じる可能性があります。あなたのデータベースサーバーへの接続、WebサーバーのRAM不足など)

これを避けるには、ドキュメントの「マスター」コピーをデータベースに保存して、すべて一緒にバックアップします。 「ユーザーxのすべてのドキュメントを持っていますか?」といったデータベースの質問をすることができます。しかし、Webサーバー上のキャッシュを使用して、必要以上にデータベースからドキュメントを読み取らないようにしました。これは、コンテンツ管理システムのように、キャッシュを保持することができる「一度、多くの時間を読む」ソリューションがある場合にうまく機能します。

関連する問題