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 больше

Другие вопросы по тегам