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

Я должен восстановить огромный дамп, взятый с mongodump утилитой. Поскольку наборы являются большими, и mongorestore восстанавливает индексы в backround, индексное здание берет очень долго для окончания. То, что я хочу, должно так или иначе сделать mongorestore для создания индексов на переднем плане так, чтобы индексное здание заняло бы меньше времени для окончания.

Я знаю, что могу использовать --noIndexRestore для игнорирования индексов, но затем я должен буду создать индексы один за другим, который является проблемой снова. Я ищу лучший способ ускорить индексное здание с mongorestore утилитой.

3
задан 3 December 2014 в 09:04
1 ответ

Только индексы, созданные с помощью {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 .

3
ответ дан 3 December 2019 в 06:33

Теги

Похожие вопросы