迁移MongoDB中的大量数据

时间:2017-07-14 11:02:20

标签: mongodb

我使用596.935个文档测试了以下内容。 Mongo版本是3.2。我有一个主副本和两个副本集。 该集合包含以下字段:

"dr" : {
        "gran" : "Day", 
        "dix" : NumberInt(121), 
        "y" : NumberInt(2017), 
}

现在我需要从/到添加其他字段。我执行这个:

db.datefieldstest.updateMany(
  { "dr.from": {$exists: true}},
  {
      $set: {
            "dr.from": new Date(),
            "dr.to": new Date()
        }
    }
)

为了使字段对应正确的dix和gran,我编写了一个存储在mongo服务器上的脚本。 要运行更新,请执行以下操作:

db.datefieldstest.find({
}).forEach(function(doc) {
    var dates = dateIndexToDateWithFromTo(doc.dr.y, doc.dr.dix, doc.dr.gran);
    doc.dr.from = dates.from;
    doc.dr.to = dates.to;
    db.datefieldstest.save(doc);
})

这个测试花了我大约40分钟。现在,这只是我们实时数据库中实际文档数量的一小部分。在现场,我们有超过50.000.000个文件。请注意,在迁移时无法阻止主数据库。

我的想法是让其中一个副本集(副本集A)独立并在那里执行迁移。在这段时间里,我将主要有读/写和副本集B同步到。 在副本集A中完成迁移后,我将其添加到主文件中并同步新文档,然后将副本集A转换为主文档。

任何人都有更好的建议吗?

0 个答案:

没有答案