Mongodb update() 与 findAndModify() 性能对比

Posted

技术标签:

【中文标题】Mongodb update() 与 findAndModify() 性能对比【英文标题】:Mongodb update() vs. findAndModify() performance 【发布时间】:2015-09-25 07:05:10 【问题描述】:

对于不断增长的文档,我可以选择使用update()findAndModify()在数组字段中插入新元素。但是,findAndModify() 将在我的特定应用程序中生成更清晰的代码。但是我可以使用update() 实现相同的功能,只是更麻烦。

我只是想知道使用update() 而不是findAndModify() 可以提高多少性能。非常感谢!

【问题讨论】:

文档有some comparison between both functions。通常做出决定的关键点是“客户需要阅读文档还是只修改它?”“客户是否需要指定一些顺序来更新一个特定的文档当有多个匹配时?” 【参考方案1】:

我使用 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()上。

以上是关于Mongodb update() 与 findAndModify() 性能对比的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 删除列(修改数据)与随机抽样方法两则

MongoDB 删除列(修改数据)与随机抽样方法两则

mongoDB数据更新与操作符

Mongodb 关于update和findAndModify

MongoDB 的 upsert

MongoDB数据库中更新与删除数据