与前景索引mongorestore

我需要恢复使用mongodump实用程序的巨大转储。 由于集合大,mongorestore在底层重build索引,索引build设需要很长时间才能完成。 我想要的是让mongorestore在前台build立索引,这样索引build设的时间就会less一些。

我知道我可以使用--noIndexRestore来忽略索引,但是我将不得不逐一build立索引,这又是一个问题。 我正在寻找最好的方法来加快mongorestore实用程序的索引build设。

只有最初使用{background: true}创build的索引(因此在system.indexes集合中设置了该选项)在恢复后会在后台构build。 将数据库转储后,您将在name.bson文件中创build数据,并在name.bson文件中创build元数据(要创build的索引)。 与BSON文件不同,JSON元数据只是文本,可以在还原之前进行修改。

作为一个testing,我创build了一个集合foo.bar ,除了ab字段的默认值外,还有两个额外的索引。 下面是转储的bar.metadata.json文件在foo文件夹中的样子:

 { "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "foo.bar" }, { "v" : 1, "key" : { "a" : 1 }, "name" : "a_1", "ns" : "foo.bar" }, { "v" : 1, "key" : { "b" : 1 }, "name" : "b_1", "ns" : "foo.bar", "background" : true } ] } 

你可以用你最喜欢的编辑器“修复”这个,并删除, "background" : true的查找和replace或类似的。 或者你可以使用sed一个class轮,例如:

  sed 's/, "background" : true//g' bar.metadata.json 

正如所料,这给了我们:

 { "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "foo.bar" }, { "v" : 1, "key" : { "a" : 1 }, "name" : "a_1", "ns" : "foo.bar" }, { "v" : 1, "key" : { "b" : 1 }, "name" : "b_1", "ns" : "foo.bar" } ] } 

我用上面的bar.metadata.json文件testing了一个还原,我的索引不再在后台创build,并且不再在system.indexes标记。