4

私が開発しているJava Webアプリケーションでは、ユーザーはファイル(写真やドキュメント)をプロファイルにアップロードし、それらのファイルのアクセスルールを定義できますファイルの表示/ダウンロード)。アクセス制御/許可システムはカスタム作成されており、ルールはmongoDBにユーザのプロファイルと実際のファイルエントリとともに格納されます。ファイルの保存+アクセス許可:mongodbとファイルシステムのアプローチ

私はアプリケーションとストレージを分散してフォールトトレラントにする必要があることを知っているので、どのファイルがファイルストレージにとって最善の戦略であるかを理解する必要があります。

mongoDB内のファイルを、説明とアクセスルールを含むファイルドキュメントが格納されているファイルコレクションに格納する必要がありますか?

ファイルをサーバーのファイルシステムに保存し、mongoDBドキュメントのパスを保持する必要がありますか?ファイルシステムのアプローチでは、私は引き続きユーザー定義のアクセス許可とその方法を強制することができますか? 最後にファイルシステムのアプローチでは、どのようにサーバー間でファイルを配布しますか?専用サーバーを使用するか、Webアプリケーションサーバーまたはmongodbサーバーにファイルを保存することはできますか?

あなたの洞察力に感謝します。どんな助けやフィードバックも感謝しています。

アレックス

+1

MongoDBのGridFSはあなたに「分散型およびフォールトトレラント」を提供します。そして既にあなたはすでにそれを設定しています。あなたは、これらのDB-VSファイルシステムの質問が通常とっているものである「パフォーマンス」について言及していませんでした。それに話すことはできません。 FWIW、私は似たようなことをやり始めています。すべてをGridFS(ローカルファイルシステムのキャッシュ)に入れようとしています。それがどうなるか見てみましょう。 – Thilo

+1

これはおそらく役立ちます:http://stackoverflow.com/questions/3413115/is-gridfs-fast-and-reliable-enough-for-production – Thilo

答えて

7

いくつかの選択肢があります。簡単かつ多くのスペースが、悪いperfのローカルファイルシステムで

  • プットファイル:ストレージ・サービス(例えばS3)で

    • プット・ファイルは高速だがスケールはありません
    • ファイルをmongodbに入れてください:簡単で強力でスケーラブルですが、16MBに制限されます。
    • mongodbのGridFSレイヤーを使用してください。機能は限られていますが、拡張性のために作られています(シャーディングのおかげで)、かなり高速です。ファイルの情報(権限など)をファイルのメタデータオブジェクトに入れることができます。

    あなたのケースでは、最後のオプションが最も良いかもしれないと思われますが、FSからgridFSに切り替えたユーザーがかなりあり、非常にうまく機能しました。 心に留めておくべき事:作品をシャーディング

    • gridfsが、完璧ではない:通常のデータだけではなく、メタデータ、シャードです。大したことではありませんが、メタデータの断片は非常に安全でなければなりません。
    • 要件(ストレージ、バックアップなど)は通常異なるため、コアデータとは別のmongodbクラスタでgridfsを使用すると有益です。
  • 関連する問題