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