Когда и как часто создавать индексы с MongoDB в производстве - PullRequest
3 голосов
/ 27 октября 2011

Я собираюсь развернуть веб-приложение, используя MongoDB в качестве хранилища. Проблема в том, что локально я могу строить индексы, когда захочу (также это делается автоматически), но вы не должны делать это в производстве. Теперь, переключаясь на производство, я не совсем уверен, когда и как часто строить индексы. Должен ли я делать это каждый день? Должен ли я делать это один раз в неделю? Мой проект похож на маленькую социальную сеть - так скажем, у меня когда-нибудь будет около 100 000 пользователей. В зависимости от объема данных создание индексов может занять часы или даже дни.

Я собираюсь построить свои индексы в фоновом режиме (см. Здесь http://www.mongodb.org/display/DOCS/Indexing+as+a+Background+Operation).. Это все равно вызовет блокировку записи, но задание на сборку будет приостановлено, чтобы другие читатели и писатели могли получить доступ к базе данных - так что если я там Это будет большая нагрузка на базу данных, фоновая сборка индекса будет по-прежнему негативно влиять на производительность. Поэтому это следует делать в пределах временного окна, когда трафик минимален (исследуется здесь http://www.javabeat.net/articles/353-indexing-in-practice-using-mongodb-1.html).

Есть ли у кого-нибудь опыт в том, когда и как часто создавать индексы в производстве (желательно с большим объемом данных)? Я использую Rails с Mongoid (http://mongoid.org/).

1 Ответ

2 голосов
/ 27 октября 2011

Вы, кажется, предполагаете, что вам нужно периодически перестраивать индексы. Это не вариант. MongoDB обновляет индексы при записи в соответствующие данные.

Единственная возможная причина, которую я вижу для перестройки индекса производства:

  • Оптимизация в реальном времени (например, добавление индекса в поле, поскольку это значительно повысит производительность)
  • После развертываний с изменениями схемы
  • После ошибок, связанных с индексом (не должно возникать)
...