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

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

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

【问题讨论】:

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

标签: javascript mongodb performance mongoose database


【解决方案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()上。
猜你喜欢
  • 2016-01-06
  • 2012-06-02
  • 2017-03-11
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2011-09-22
相关资源
最近更新 更多