セグメント間でのクエリ実行の並列化
concurrent
オプションはクエリ内並列処理を有効にします。 このモードでは、Atlas Search はより多くのリソースを使用しますが、個々のクエリ レイテンシは改善されます。 この機能は、 専用検索ノードでのみ使用できます。
構文
concurrent
の構文は次のとおりです。
{ "$searchMeta"|"$search": { "index": "<index name>", // optional, defaults to "default" "<operator>": { <operator-specifications> }, "concurrent": true | false, ... } }
動作
concurrent
ブール値オプションを使用すると、Atlas Search にリクエストしてセグメント間でクエリの実行を並列化することができます。これにより、多くの場合、応答時間が向上します。 concurrent
オプションには次のいずれかの値を設定できます。
true
- Atlas Search にクエリのマルチスレッド実行をリクエストするfalse
- クエリをシングルスレッドで実行する場合(デフォルト)
Atlas Search では、クエリごとにこの動作を制御して、重いクエリや長時間実行されるクエリのみの同時実行を有効にすることで、競合が最小限に抑えられ、クエリ全体のスループットが向上します。 セグメントの量が多いため、同時実行は特に大規模なデータセットで効率的です。
制限
concurrent
オプションを使用してクエリを実行する場合、Atlas Search は各クエリが同時に実行されることを保証しません。 たとえば、同時クエリが多すぎる場合、Atlas Search は単一スレッド実行にフォールバックする可能性があります。
例
サンプル データのsample_mflix.moviesコレクションに対する次のクエリを検討します。 クエリは、 title
内にタームnew york
を含む映画の同時検索を示します。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "path": "title", 6 "query": "new york" 7 }, 8 "concurrent": true 9 } 10 } 11 ])