并行查询各分段
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 ])