ファイルストレージ +許可:MongoDB vsファイルシステムアプローチ
-
28-10-2019 - |
質問
私が開発しているJava Webアプリにより、ユーザーはファイル(写真とドキュメント)をプロファイルにアップロードし、それらのファイルのアクセスルールを定義できます(他のユーザーがファイルを表示 /ダウンロードできるものを定義します)。アクセス制御 /許可システムはカスタムメイドであり、ルールはユーザーのプロファイルと実際のファイルエントリとともにMongoDBに保存されます。
アプリケーションとストレージを配布する必要があることを知っており、ファイルストレージに最適な戦略であるかを把握するために必要な場合があります。
説明とアクセスルールを含むファイルドキュメントにあるファイルコレクションにMongodb内にファイルを保存する必要がありますか?
または、ファイルをサーバーのファイルシステム内に保存し、MongoDBドキュメントにパスを保持する必要がありますか?ファイルシステムアプローチを使用すると、ユーザー定義のアクセス権限を強制することができますか?最後に、ファイルシステムアプローチでファイルを配布するにはどうすればよいですか?これに専用サーバーを使用する必要がありますか、それともファイルをWebAppサーバーまたはMongoDBサーバーに保存できますか?
すべての洞察をありがとう!あらゆるヘルプやフィードバックが高く評価されています。
アレックス
解決
いくつかの選択肢があります:
- ファイルをストレージサービスに入れます(例:S3):簡単で多くのスペースがありますが、悪いパフォーマンス
- ローカルファイルシステムにファイルを入力:高速ですが、スケーリングしません
- ファイルをmongodbドキュメントに入れる:簡単で強力でスケーラブルですが、16MBに制限されています
- Mongodbのgridfsレイヤーを使用します。機能は限られていますが、スケーラビリティのために作られており(シャードのおかげで)、かなり高速です。注ファイル(許可など)に関する情報をファイルのメタデータオブジェクトに入れることができます。
あなたの場合、最後のオプションが最適であるように聞こえます。FSからGRIDFに切り替えたユーザーはかなり多く、それらのために非常にうまく機能しました。留意すべきこと:
- gridfsシャードは機能しますが、完全ではありません。通常、メタデータではなく、データのみがシャードされます。大したことではありませんが、メタデータのあるシャードは非常に安全でなければなりません。
- 要件(ストレージ、バックアップなど)は通常異なるため、コアデータから別のMongoDBクラスターでGRIDFを使用することが有益です。
所属していません StackOverflow