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() 性能对比的主要内容,如果未能解决你的问题,请参考以下文章