【问题标题】:MongoDB bulk update efficiency using forEachMongoDB批量更新效率使用forEach
【发布时间】:2016-06-28 17:31:45
【问题描述】:

您将如何处理批量/批量更新文档(最多 10k 文档)以及 forEach? (没有具体的更新标准,用于随机文档选择)

我正在考虑两个选项:

  1. forEach闭包中的所有文档_id收集到一个数组中,然后使用更新 collection.update({_id : {$in : idsArray}}, ...)
  2. forEach 闭包中将更新查询添加到批量操作并在完成后执行,类似于 bulk.find({_id: doc.id}).updateOne({...}); bulk.execute();

我很快就会对此进行基准测试,但我想知道 Mongo 的 I/O 效率更高并被认为是“智能”的。

【问题讨论】:

    标签: mongodb foreach bulkupdate


    【解决方案1】:

    好的,我已经对这两个选项进行了基准测试。

    TL;DR 选项一的速度是原来的两倍,所以收集 id 并更新一次。

    供将来参考,更多详细信息:

    • db 中的文档总数约为 500k。
    • 每个文档包含大约 20-25 个字段。
    • 更新了 10-30k 个文档。

    结果(时间因机器而异,但重要的是相对差异):

    1. 使用 ids 数组更新一次:200-500 毫秒。
    2. 批量更新:600-1000 毫秒。

    回想起来,我认为批量可能会更快,因为可能存在一些隐藏的优化。但我知道这个问题缺少逻辑,更少的操作可能意味着更快,因此批量更慢。

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2015-04-24
      • 2011-05-25
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2014-10-06
      • 1970-01-01
      相关资源
      最近更新 更多