Назад | Перейти на главную страницу

mongorestore с индексацией на переднем плане

Мне нужно восстановить огромный дамп, сделанный с помощью утилиты 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 больше.