シャーディングデータベースはシャードキーを使用してチャンクを分割し、クエリをルーティングするため、シャードキーを増やすと、より多くのクエリを対象にすることができると思います。
このように複数のキーを指定してみました
db.runCommand( { shardcollection : "test.users" , key : {_id:1, email : 1 ,address:1}
しかし、それが機能するかどうか、そしてこれを行うことの欠点は何ですか?
ここで明確にするために、シャードキーは1つしか持つことができません。したがって、複数のシャードキーを持つことはできません。
ただし、シャードキーとして複合インデックスを提案しています。これは可能ですが、いくつかの制限があります。
たとえば、との組み合わせは_id
一意email
でaddress
ある必要があります。
シャードキーを選択するためのドキュメント。ここに記載できない考慮事項が他にもいくつかあります。そのドキュメントを参照してください。
以下に基づくシャードキーの選択:
{coarseLocality : 1, search : 1}
粗い局所性は、データに必要な局所性です。検索は、データに対する一般的な検索です。
シャーディングするキーにはインデックスが必要です。したがって、クエリを実行しないランダムな値のキーを選択すると、基本的にインデックスが無駄になります。インデックスを追加するたびに書き込みが遅くなるため、インデックスの数をできるだけ少なくすることが重要です。
したがって、シャードキーの組み合わせを増やしてもあまり役に立ちません。
KristinaChodrowの本「ScalingMongoDB」からの抜粋。