gpt4 book ai didi

node.js - 慢速查询会阻塞快速查询,直到执行慢速查询为止 : MongoDB with NodeJs driver

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:19 24 4
gpt4 key购买 nike

我正在运行一个慢速查询/聚合,需要 3 秒以上,然后其他查询会被阻止,直到慢速查询完成。

执行慢查询后,仅执行等于连接池大小的快速查询数量,然后所有进一步的操作都会被阻塞,直到慢查询执行为止。之后快速查询正常执行。

我正在使用 MongoDB 2.6.7 和 mongodb NodeJs 驱动程序 1.4.30。

聚合管道速度缓慢:

[{"$unwind": "$status_history"},{"$sort": {"_id": -1}},{"$limit": 100}]

我在一个包含 10k 文档的集合上运行上述查询,展开时会产生 200k 文档,然后 $sort 进行操作。这大约需要 5-10 秒。

在此之后,任何简单的查询通常会在 100-500 毫秒 3-10 秒内执行。

最佳答案

这是我从 MongoBD 支持处得到的:

poolSize :允许您控制并行打开多少个 tcp 连接。默认值为 5,但您可以根据需要将其设置为高值。驱动程序将使用循环策略来调度和读取 TCP 连接。

如果连接正忙于运行缓慢的操作,这可能会阻止后续操作。

有两种可能的解决方法:

Increase the connection pool size

如果您无法控制正在运行的查询类型,则在运行较长的操作时使用较大的连接池会降低发生这种情况的可能性/频率,尽管操作仍然有可能被阻止,并且这种可能性会随着时间的推移而增加长时间运行的操作开始出现。通过更大的循环池,当再次从池中选择连接时,长时间运行的操作更有可能已在连接上完成。

Diverge the possible slower operations into another connection pool

您可以为较慢的操作创建一个单独的连接池(即 MongoClient.connect() 的结果),并保留生产池来满足快速查询。这将确保缓慢/阻塞的聚合查询不会卡住其他操作的池。当然,较慢的操作很难事先确定,但例如,它们可能是使用排序、大限制、跳过、聚合或映射缩减操作的查询。

关于node.js - 慢速查询会阻塞快速查询,直到执行慢速查询为止 : MongoDB with NodeJs driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28336817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com