Мне нужно восстановить огромный дамп, сделанный с помощью утилиты mongodump. Поскольку коллекции большие и mongorestore перестраивает индексы в фоновом режиме, построение индекса занимает очень много времени. Я хочу как-то заставить mongorestore строить индексы на переднем плане, чтобы построение индекса занимало меньше времени.
Я знаю, что могу использовать --noIndexRestore
чтобы игнорировать индексы, но тогда мне придется строить индексы один за другим, что снова является проблемой. Я ищу лучший способ ускорить построение индекса с помощью утилиты mongorestore.
Только индексы, созданные с помощью {background: true}
изначально (и, следовательно, этот параметр установлен в system.indexes
collection) после восстановления создаются в фоновом режиме. После того, как вы сбросите базу данных, ваши данные будут в name.bson
файл и метаданные (индексы для построения) в name.metadata.json
файл. В отличие от файла BSON, метаданные JSON представляют собой просто текст и могут быть изменены перед восстановлением.
В качестве теста создал коллекцию foo.bar
, с двумя дополнительными индексами помимо значения по умолчанию для a
поле и на b
поле. Вот что свалили 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
с помощью функции поиска и замены или аналогичного. Или вы можете использовать sed
один лайнер, что-то вроде:
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, и мои индексы больше не создавались в фоновом режиме и не были отмечены как таковые в system.indexes
больше.