Mongodb的update()和findAndModify()性能比较

3
对于一个不断增长的文档,我可以选择使用update()findAndModify()来在数组字段中插入新元素。但是,在我的特定应用程序中,findAndModify()将生成更干净的代码。但是,我可以使用update()实现相同的功能,只是会更加混乱。
我只是想知道使用update()而不是findAndModify()能获得多少性能提升。非常感谢!

1
该文档包含了两个函数之间的比较。通常,做出决策的关键点是“客户端是否需要读取文档或仅修改文档?”和“当有多个匹配项时,客户端是否需要指定某个顺序来更新一个特定的文档?” - Sylvain Leroux
1个回答

3

我用mongo shell进行了快速测试。针对这个文档:

{
   "c" : 50,
   "growingArray" : [ 0 ]
}

我进行了两次测试:

for (i = 1; i < 10000; i++)
{
    db.testids.update( { "c" : 50 }, { $addToSet : { "growingArray" : i } } );
}

在我的中档笔记本电脑上总共花费了40.926秒findAndModify() 版本:
for (i = 1; i < 10000; i++)
{
    db.testids.findAndModify({ query: { "c" : 50 }, update : { $addToSet : { "growingArray" : i } } } );
}

用了42.445秒。我进行了五次测试。

你可以从中得出自己的结论。直觉上,使用findAndModify()在我的特定环境下会增加3%到4%的开销,前提是没有其他操作。但请记住,findAndModify()获取写锁,因此可能对整个应用程序的性能产生更大的影响。


非常有说服力的理论和测试结果,我认为如果您正在保存一些关键数据,花费更多时间使用 findAndModify() 是值得的。 - Wayne Wei

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