MongoDBシングルデータベースvsクライアントごとのコレクションとクライアントごとのデータベース
質問
MongodbとLithiumを使用してWebサービスを構築したいです。より良いもの:
すべてのクライアントのデータを1つのコレクションに保存します(たとえば、複数のクライアントのすべてのトランザクションドキュメントが1つのコレクショントランザクションにあります)
複数のコレクションを作成します。
クライアントごとに1 dB
システムはスケーラブルでなければならず、展開しやすい必要があります
解決
方向性を提供するには、正確に何を達成したいかについてもっと知る必要があります。
ただし、このアプローチの利点が実際にはないので、オプション2(複数のコレクション)を除外します。実行時にコレクション名を決定する必要があります。クエリを書くのはもう少し難しいですあなたが持つことができるコレクションの数には厳しい制限があります(2GBの約150万のコレクション 名前空間ファイル)
オプション1は、クライアントを分離するのに役立ち、セキュリティを改善する可能性がありますが、データベースを選択する際にエラーをプログラミングするリスクがまだあります。ただし、そのコードを分離するのは簡単です。
これらのオプションは両方とも、すべてのコレクションでクエリすることができないという欠点があります。ただし、すべてのクライアント(ログ、統計など)で本質的に共有されているいくつかのコレクションにアクセスできるようにすることをお勧めします。そのため、これらを分離するという追加の負担があります。
それが私が私がする理由です いつもの オプション1に移動します。
他のヒント
1つのDBと1つのコレクションから始めることをお勧めします。通常、1つのデータベースをより簡単に管理します。将来的には、個別のデータベースを作成する必要がある場合(クライアントの一部をスピードアップするために)できます ごみ このクライアントのデータとそれを別々のデータベースサーバー(または別々のコレクション)に配置します。アプリケーションのアーキテクチャを設計するときに、この機能を心に留めてください。だから、私の意見はそうです オプション1. 。別の観点からは、シャードとレプリケーションを介して1つのコレクションでスケーリングできます。
システムはスケーラブルでなければならず、展開しやすい必要があります
データベースは、拡張するように設計されたMongoDBを使用しているからといって、スケーラブルになります。また、データベースはSchemalessであるため、簡単に展開できます。一般に、あるサーバーから別のサーバーにいくつかのデータを簡単にコピーする必要がある場合があります。それを行う方法はたくさんあります: コピーコレクション, 、 データ インポート・エクスポート, データベースをコピーします.