mongorestore com indexação em primeiro plano

3

Eu preciso restaurar o despejo enorme obtido com o utilitário mongodump. Como as coleções são grandes e o mongorestore reconstrói índices no backround, o índice de construção demora muito para terminar. O que eu quero é de alguma forma fazer mongorestore para construir índices em primeiro plano para que o edifício do índice levaria menos tempo para terminar.

Eu sei que posso usar --noIndexRestore para ignorar os índices, mas então terei que criar índices um por um, o que é um problema novamente. Eu estou procurando a melhor maneira de acelerar o índice de construção com utilidade mongorestore.

    
por Abhay PS 03.12.2014 / 08:04

1 resposta

3

Somente índices criados com {background: true} originalmente (e, portanto, têm essa opção definida na coleção system.indexes ) são criados em segundo plano depois de restaurados. Depois de ter o banco de dados despejado, você terá seus dados no arquivo name.bson e os metadados (índices a compilar) no arquivo name.metadata.json . Ao contrário do arquivo BSON, os metadados JSON são apenas texto e podem ser modificados antes da restauração.

Como teste, criei uma coleção foo.bar , com dois índices adicionais além do padrão no campo a e no campo b . Aqui está como ficou o arquivo bar.metadata.json descartado na pasta foo depois que eu o descartei:

{ "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 } ] }

Você pode "corrigir" isso com seu editor favorito e remover , "background" : true com um & find & substituir ou similar. Ou você pode usar um forro sed one, algo como:

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

Qual, como esperado, nos dá:

{ "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" } ] }

Eu testei uma restauração com o arquivo bar.metadata.json acima e meus índices não foram mais criados em segundo plano e não foram marcados como tal em system.indexes por mais tempo.

    
por 04.12.2014 / 08:18