現在、1つのレプリカセットで、クライアントごとに1つのMongoDBデータベースを使用しています。セキュリティ上の理由から、クライアントごとに1つのデータベースを保持します。
各クライアントには同じ15のコレクションがあり、顧客ベースを拡大しているので、これを顧客のグループで異なるマシンにスケールする必要があります。
私はシャーディングに関するMongoDBのドキュメントを読んでいますが、アプローチはコレクションとシャードキーによるものであるため、多くのデータベースがある場合の状況を心配しています。
複数のデータベースを持つシャーディングを使用することは可能ですか?そしてそれが可能であれば、どのようなアプローチが良いでしょうか?
はい、互換性があります。複数のシャードがある場合、異なるデータベースがバランスの取れた方法で異なるシャードに自動的に割り当てられます。
シャーディングシステムは、シャードキーを使用してシャード間で大規模なコレクションを分散しますが、異なるシャード間で個別のデータベースも分散します。 shardsのドキュメント で説明します:
分割クラスター内の各データベースには、そのデータベースの分割されていないすべてのコレクションを保持するプライマリー断片があります。各データベースには独自のプライマリシャードがあります。プライマリー断片は、レプリカセットのプライマリーとは関係ありません。
mongosは、新しいデータベースを作成するときに、データ量が最も少ないクラスター内のシャードを選択してプライマリシャードを選択します。
これを使用して、次のように各クライアントのデータベースを異なるシャードに割り当てることができます。
このアプローチに関するいくつかの警告: