concurrent 选项可启用查询内并行机制。在此模式下, MongoDB Search 会利用更多资源,但会改善每个单独查询的延迟。此功能仅适用于专用搜索节点。
concurrent 选项限制
当您使用 concurrent 选项运行查询时,MongoDB Search 不保证每个查询都会同时执行。示例,当队列中的并发查询过多时,MongoDB Search 可能会回退到单线程执行。
语法
concurrent 通过以下语法实现:
{ "$searchMeta"|"$search": { "index": "<index name>", // optional, defaults to "default" "<operator>": { <operator-specifications> }, "concurrent": true | false, ... } }
行为
concurrent 布尔值选项允许您请求 MongoDB Search 跨区段并行执行查询,这通常可以缩短响应时间。您可以为 concurrent 选项设定以下值之一:
true—请求MongoDB Search 以多线程方式运行查询false- 单线程运行查询(默认)
MongoDB Search 允许您按查询控制此行为,仅对繁重且长时间运行的查询启用并发启用,从而最大限度地减少争用并提高整体查询吞吐量。并发执行在大型数据集上尤其有效,因为数据段的数量更多。
CPU 使用率
MongoDB Search 在多个线程上运行并发查询,因此,查询完成得更快。但查询在您的 Search 节点 上运行时会消耗更多 CPU。对于大量查询或短运行查询,启用 concurrent 选项可能会占用满搜索节点上的 CPU 并降低整体查询吞吐量。为了限制对 CPU 的影响,只对重度和长时间运行的查询启用 concurrent 选项,这些查询可从较低的延迟中获益。
要衡量单个查询的 CPU 费用,请使用 explain 运行该查询,并查看 resourceUsage 文档中的 userTimeMs、systemTimeMs 和 maxReportingThreads 字段。
To monitor CPU usage across your deployment, view the Atlas cluster metrics and the Review MongoDB Search Metrics. Atlas can also trigger MongoDB Search alerts that measure the amount of CPU that MongoDB Search processes use. If CPU usage approaches the limits of acceptable performance, scale your Search Nodes vertically or horizontally. To learn more, see Tips for Sizing and Scaling Search Nodes.
例子
Consider the following query against the sample_mflix.movies collection in the sample data. The query indicates a concurrent search for movies that contain the term new york in the title.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "path": "title", 6 "query": "new york" 7 }, 8 "concurrent": true 9 } 10 } 11 ])