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