0

タイトルが示すように、アップロードされたファイルを Java EE Web アプリケーションに保存するための推奨される方法は何ですか? ファイルをサーブレットコンテナのファイルシステムに保存することは、それ以上の説明なしでは推奨されないという他の質問に対するいくつかの回答を読みました。データベースに保存する必要があると言う人もいますが (以前に読んだことからそれは疑わしいです)、JCR を使用する必要があると言う人もいますが、私が見つけることができる唯一の実装は Apache JackRabbit ですが、あまりアクティブではないようです。

最良の選択肢は何ですか?上記以外にもありますか?どちらか一方を選択する理由が評価されます。

4

3 に答える 3

3

環境に応じて、おそらく次のいずれかを実行する必要があります。

  1. サーバーはクラウドにあります。Amazon S3などの共有クラウド ストア サービスを使用することをお勧めします(優れた API を備えています)。

  2. あなたは従来のサーバーでホストされています。この場合、ベスト プラクティスは共有 NAS を使用することですが、クライアントが規制上の問題を抱えていない限り、クラウド ストレージも選択肢の 1 つです。

  3. あなたは主に多くの小さな(より)ファイルを扱っており、それらを検索可能にしたいと考えています。このシナリオでは、BLOB データベース列を選択します。

  4. 大きなファイル (ビデオなど) を処理している場合は、代わりに NAS/クラウド ストレージを調べて、データベースを NAS/S3 の場所への単なる参照として使用することをお勧めします。

これらのオプションの理由は、データを実行中のインスタンスにサンドボックス化したくないためです。このアーキテクチャにより、アプリケーションの追加インスタンスをオンラインにするか、単純なサーバー移行を行うことができ、引き続き共有データにアクセスできます。

于 2013-04-25T19:27:21.143 に答える
1

すでに見てきたように、JCR はそれほど人気が​​ありません。ファイルシステムを使用することは、プラットフォームの観点からはあまり良い考えではありません (たとえば、Windows には、ファイル パスの最大長の制限、有効なファイル名の制約、ディレクトリ内の 100K ファイルを超える問題があり、クロールが遅くなる前に) ) とアーキテクチャの観点 - アプリケーションのクラスタリングについて考えてみましょう:

任意の形式のローカル ストレージを使用する場合、簡単にクラスタ化することはできません (すべてのノードからすべてのファイルに簡単にアクセスできるわけではないため)。そのため、すべてのクラスタ ノードからアクセスできるものを選択する必要があります。DBはそれにぴったりです。問題の詳細によっては、ある種のクラスター キャッシュ (または Hadoop) も適している場合があります。

于 2013-04-25T18:52:04.920 に答える
0

私の意見では、このメッセージのこの質問は、何を保存したいかによって異なります。HD ビデオのような大きなファイルは、ファイルシステム経由ではるかに高速にアクセスできます。一方、データベースを使用すると、ファイルが実際に保存されていることを知る必要がないため、作業が簡単になります。

少量で小さいファイル > データベースそれ以外の場合はファイルシステム

ファイルシステムをストレージとして使用するもう 1 つの長所は、apache luscene のような全文検索フレームワークを実装できることです。

于 2013-04-25T19:02:46.480 に答える