シャード キーに含める必要があるのは並べ替えフィールドではなく、データを選択するために使用している基準です。つまり、mongos がクエリの一部として使用しているフィールドから、データが具体的に存在する場所を特定できない場合、すべてのシャードに送信されます。これは、他の非ソート クエリと同じです。非シャードキー フィールドでの並べ替えは、モンゴがクエリを適切にルーティングする機能には影響しません。
これは、ここのドキュメントで言及されています:
https://docs.mongodb.org/v2.4/core/sharded-cluster-query-router/#how-mongos-handles-query-modifiers
シャードは mongos からクエリを受け取り、結果のサブセットを並べ替えて、mongos に送り返します。次に、mongos は返された結果を提示する前にマージソートを実行する必要があります。結果は最初にシャードによって並べ替えられるため、これは完全な並べ替えほど集中的ではありませんが、それでもリソースが必要になります。消費されるメモリの量は、さまざまなシャードによって返される結果セットのサイズに関連します。
編集 (2016 年 5 月): 2012 年に最初に回答されたときは上記のとおりでしたが、(以下のコメントで指摘されているように) 2014 年のバージョン 2.6 で動作が変更されました。 mongos (そしてユーザー) に返される前にソートされたマージ。インスタンスは大規模なソートを実行するリソースを持っている可能性がはるかに低いため、これは非常に理にかなっていmongos
ますが、頻繁にソートされるデータベースのプライマリがどこにあるかに細心の注意を払う必要があることを意味します。結果として。