1

私は、ユーザーがファイルをアップロードして他の人と編集/共有できるようにする webapp (SpringMVC + JSF) を作成しています。このアプリのサービス レイヤーでは、すべてのファイル IO を処理するために guava を使用していますが、残念ながらリファレンス マニュアルでこれまでに確認したところによると、guava はファイルへの同時アクセスの問題に対処していません。

Java が提供する FileChannel クラスには、この問題をある程度解決する lock メソッドがあることは承知していますが、guava IO フレームワークにはうまく適合しません。グアバを取り除き、FileChannel と InputStream でコードを書き直す前に、別の IO パッケージに完全に切り替えずにこれを行う方法が他にあるかどうか知りたいです。

(ファイル名をロックにマッピングする大きなハッシュテーブルは、私には良い解決策とは思えません。ユーザーベースが大きい場合、メモリに保存するには多すぎます。)

4

1 に答える 1

3

データベースを使用します。ファイル システムは、実際のファイル コンテンツを格納するのに最適ですが、ユーザー、ファイルの詳細、共有、編集とバージョン履歴などを格納および管理するには、データベースが絶対に必要です。

失敗したアップロードによる情報の損失を避けるために、アップロードと編集 (たとえば) は新しいファイルに移動する必要があります。既存のファイルを上書きしたり、破棄したりしないでください。

編集と共有は、連続したバージョン (ディスク上の実際のファイル) を持つ可能性のあるエンティティ (おそらく「DOCUMENT」テーブルの行) に対しても行われると考えられます。

したがって、少なくとも 2 つの理由から、「ファイルシステム ファイル」は、追跡する必要があり、ユーザーが操作したいエンティティとは異なります。

想定されるユーザーベース大きくなった場合、彼らはおそらく実際のアプリケーションを期待するでしょう. 信頼性の高いデータベースを使用すると、ユーザー アクセス、ドキュメントのバージョン、ディスク上の基になるファイルの共有と場所とロック状態を簡単かつ確実に記録できます。

そのようなデータベースがなければ、確実に行うことはできません。

于 2013-04-02T00:55:29.730 に答える