Согласно документации Mongoose для MongooseJS
и MongoDB
/ Node.js
:
Когда ваше приложение запускается, Mongoose автоматически вызывает
ensureIndex
каждый определенный индекс в вашей схеме. Хотя это удобно для разработки, рекомендуется отключить это поведение в производственной среде, поскольку создание индекса может существенно повлиять на производительность. Отключите поведение, установив дляautoIndex
параметра вашей схемы значение false.
Похоже, что это указывает на удаление автоматической индексации из мангуста перед развертыванием, чтобы оптимизировать Mongoose от указания Mongo пройти и перебрать все индексы при запуске приложения, что, кажется, имеет смысл.
Как правильно обрабатывать индексацию в производственном коде? Может, внешний скрипт должен генерировать индексы? Или, может быть, ensureIndex
это не нужно, если одно приложение является единственным средством чтения / записи коллекции, потому что оно будет продолжать индексировать каждый раз, когда происходит запись в БД?
Изменить: в дополнение, MongoDB предоставляет хорошую документацию о том, как выполнять индексацию, но не почему и когда должны выполняться явные директивы индексации. Мне кажется, что приложения-писатели должны автоматически обновлять индексы в коллекциях с существующими индексами, и это ensureIndex
действительно больше одноразовая вещь (выполняется, когда применяется новый индекс), и в этом случае Mongoose autoIndex
должен быть no-op при обычном перезапуске сервера.
autoIndex
false, вам необходимо вызвать в модели sureIndexes для создания ее индексов.Хотя я согласен с принятым ответом, стоит отметить, что, согласно руководству MongoDB , это не рекомендуемый способ добавления индексов на производственный сервер:
Конечно, это действительно зависит от того, как ваше приложение структурировано и развернуто. Если вы выполняете развертывание на Heroku, например, и не используете функцию предварительной загрузки Heroku , то вполне вероятно, что ваше приложение вообще не обслуживает запросы во время запуска, и поэтому, вероятно, в это время можно безопасно создать индекс.
В дополнение к этому из принятого ответа:
Если вам удалось получить свою модель данных и запросы с первого раза, это нормально, и часто это так. Однако, если вы добавляете новые функции в свое приложение, с новым запросом к БД для свойства без индекса, вы часто обнаружите, что добавляете индекс в коллекцию, содержащую множество существующих документов.
Это время, когда вам нужно быть осторожным при добавлении индексов и тщательно учитывать влияние этого на производительность. Например, вы можете создать индекс в фоновом режиме :
источник
ensureIndex
. СуществуетcreateIndex
вместо этого. Я прав?используйте этот блочный код для обработки рабочего режима:
источник