使用Node js进行Mongodb计数性能问题

时间:2016-07-22 21:34:08

标签: node.js mongodb performance node-mongodb-native

我在单个表上计数最多100万条记录时遇到问题。我有一个32核244gb ram盒子,我正在运行我的测试,所以硬件应该不是问题。

我在我用于执行计数的所有查询上设置了索引。我已将节点max_old_space_size启用为15gb。

我正在遵循的流程基本上是循环一个庞大的数组,创建1000个承诺,在每个承诺中我执行12个计数,等待所有解决的承诺,然后继续下一千个批次。

作为测试的一部分,我也在进行插入,更新和读取。所有这些,每个都表现出高达20000 /秒的出色表现。但是,当我到达我的代码部分执行count()时,我可以通过mongostat看到每秒只执行20-30个命令。我现在还没有确定,如果我的节点代码只发送那么多,或者mongo正在排队。

同时,在我的node.js代码中,所有1000个promise都会启动并等待评估。我知道这是很多信息,所以请让我知道我应该提供哪些更详细的细节,以便更深入地了解计数性能如此之慢的原因。

所以基本上,对于一批1000条记录,每组12个计数,总计12,000个计数,在100万条记录表上花费近10分钟。

MongoDB Native Client v2.2.1 节点v4.2.1

我想补充的是,我尝试将驱动程序的maxPoolSize从100-1000更改为性能没有变化。我已经尝试将我执行的查询从yield / generator / promise更改为包含在promise中的回调,这有点帮助。

奇怪的是,当我的程序启动时,即使我只使用我在运行mongostat时看到的默认连接数7,我每秒可以获得大约2500次count()查询。然而,几秒钟后,这又回到了大约300-400。这让我相信mongo可以一直处理那么多,但是我的代码无法发送那么多请求,即使我将maxPoolSize设置为300并启动10000个并发解决的并发协议。什么给出了任何人的想法?

0 个答案:

没有答案