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