Mongodb 性能 - 批量更新 vs. 串行更新 vs. 串行获取和更新

问题描述

node.js 中的应用程序有一个 后台作业,它每隔几天运行一次,并且:

从第三方接收数十万个输入对象。

对于每个输入对象:

如果mongodb中存在对应的文档,而文档中不存在字段X,则在该文档中添加字段X。

注意事项:

  • 这个流程是一个后台同步,它的结果不是实时需要的,所以我们不关心这个工作会花很多时间。

  • 通过_id从mongodb查询文档。

  • 使用 mongodb WiredTiger。

  • 假设 mongodb 中的文档数约为 100 万。

  • mongodb 中将存在大量输入对象对应的文档。

  • 我们预计,当此流程运行时,在某些情况下,高百分比的文档将满足更新条件,而在某些情况下,高百分比的文档将不满足更新条件。

假设主要目的是:

运行此流程的最佳方法是什么 - 在 mongodb 中处理批量文档或在 mongodb 中分别处理每个输入对象?

如果答案是在 mongodb 中处理批处理,例如:

db.mycoll.update(
    { 
        "_id" : {$in:["id1","id2","id3"...]},"X": {$exists: false}
    },{
        $set : {"X":1}
    }
);
  1. 在这方法中存在单点故障。

  2. 哪个批量大小是最佳的?

  3. 如果高比例的文档不满足更新条件,我们进行更新查询(而不是从mongodb获取并在应用程序中决定不需要更新)会影响mongodb的性能吗?在这种情况下,锁将如何工作?未更新的文档会被锁定吗?

如果答案是在 mongodb 中分别处理每个输入对象

  1. 是首选读取每个文档然后仅在需要时更新,还是仅运行具有条件的更新查询(相同的性能问题)?

  2. 应用程序是否应该为批量输入对象并行或串行运行单对象处理功能

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)