2012-02-01 3 views
1

Этот вопрос имеет два аспекта, оба связаны с индексами.Mongodb индекс состояния столкновение и индексирование состояния

У меня есть набор данных с 530 миллионами записей, каждая запись имеет массив из 10 элементов. Я использую один монгод. Я строю индекс в массиве post-bulk-insert. Массив имеет две пары ключ-значение типа string - int.

Я уже вывел/researched, что установка индекса перед конструированием - это то, для чего предназначен mongodb, и такие большие наборы данных не могут быть (после вставки) индексированы без массивного количества ram/swappable-virtual-memory.

один: этапы построения индекса

Каковы этапы построения индекса, я смотрел на журнал и увидел, что идти один раз от 0 до 100%, только начать отсчет, когда он достиг 100 % (что-то связано с сортировкой?). Вторая фаза была МНОГО медленнее, чем первая. Есть ли еще какие-то проходы, которые нужно сделать?

два: Индекс состояния

Я не собирался наблюдать строительство индекса в этом случае, и у меня есть индексный набор данных в качестве резервного (который я не могу доверять больше, продолжайте чтение). Итак, я kill -9'd процесс. Я снова запустил процесс, и журналы показывают, что база данных подтвердила, что операция построения индекса продолжалась и заканчивалась неправильно, но ничего кроме этого. Индекс отображается в списке db.<db-name>.getIndexes().

Я считаю это ОЧЕНЬ особенным, особенно getIndexes бит, я знаю, что конструкция индекса в этом случае так и не закончилась, и теперь я не могу доверять резервным копиям, которые у меня есть, в которых я считаю, что индексирование окончено нормально.

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

Итак, как мне узнать, находится ли моя база данных в согласованном состоянии, в частности индексы?

ответ

2

Итак, как мне узнать, находится ли моя база данных в состоятельном состоянии, в частности индексы?

Для этого есть validate command. Команда - это команда блокировки, например, ремонт, но похоже, что у нее есть несколько вариантов.

Таким образом, откат конструкции индекса, завершение работы или отказ от запуска без операции восстановления.

Согласен. И журналы должны быть кристально понятны о состоянии, когда БД при его перезапуске. Однако MongoDB определенно не «там».

Вторая фаза была МНОГО медленнее, чем первая. Есть ли еще какие-то проходы, которые нужно сделать?

Действительно, после завершения второй фазы БД затем блокирует и выполняет гигантский fsync, поскольку он сбрасывает вновь созданный индекс на диск. Вероятно, это было, когда вы его убили.

Последний раз, когда я смотрел этот процесс, в течение fsync не было сообщений журнала. Учитывая размер ваших данных, это будет представлять концерты и концерты с потоком данных на диск. Запустите некоторую математику по скорости ваших дисков по сравнению с индексом, но эта фаза может определенно представлять много времени ожидания.