2

並べ替えフィールドがシャード キーの一部でない場合、mongos はクエリをすべての mongod インスタンスに送信します。すべての mongod インスタンスがデータを返した後、mongos はそれらをマージします。

このマージ操作にはソートが含まれますか?

並べ替えフィールドはシャード キーの一部ではないことがわかっているため、返されるデータは順序付けされていない必要があり、mongos は並べ替えを行う必要があります。その場合、返されるデータが非常に大きい場合、mongos は多くのメモリを占有します。

私の理解は正しいですか?

4

2 に答える 2

4

シャード キーに含める必要があるのは並べ替えフィールドではなく、データを選択するために使用している基準です。つまり、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ますが、頻繁にソートされるデータベースのプライマリがどこにあるかに細心の注意を払う必要があることを意味します。結果として。

于 2012-08-29T10:02:03.323 に答える
0

バージョン 3.2 では、フェッチでプライマリ シャードが使用されない場合 (つまり、プライマリ シャードに検索コマンドのドキュメントが含まれていない場合)、代わりにセカンダリ シャードを使用できます。

于 2016-07-12T15:29:08.377 に答える