MongoDB批量更新速度慢

3
我正在运行Mongo 2.6.3版本,要更新约900个记录,有时甚至高达5000个记录。以前我是通过循环来处理的,在处理900个记录时,upsert操作需要1分钟才能完成。
现在我正在使用initializeUnorderedBulkOp API,但处理900个记录需要大约40秒钟,速度非常慢。为什么会这样?
我的代码基本上是这样的:
var batch = collection.initializeUnorderedBulkOp({useLegacyOps: true});
// for loop
batch.find(query).upsert().updateOne({my object});
batch.execute({w:0},function(err, result) {

这是使用node驱动程序。这些调用的网络面板截图http://cl.ly/image/0L2a0o0w1I1b

当数据较小时,所需时间较短,因此这绝对是一个记录数量的问题。最后,我的对象不是很大,可能只有9个键左右,没有大数据。

如何缩短这个时间?有什么想法吗?


query 可以使用索引吗?如果不能,请确保它可以。 - JohnnyHK
我们可以有更多的信息吗?查询是什么?它被索引了吗?有哪些更新?集合上存在哪些索引? - wdberkeley
哎呀,索引就是答案。你应该留下它,这样我就可以标记它了。我真笨,没有意识到这一点。 - Sean Clark
1个回答

2
根据你的评论,你的find查询没有使用索引,这会导致完整的集合扫描。
在你的集合中添加一个可以被find(query)使用的索引;使用explain()确认其是否正在被使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接