Можно ли вызывать sureIndex для несуществующих коллекций? - PullRequest
11 голосов
/ 15 марта 2011

Я где-то читал, что вызов ensureIndex() фактически создает коллекцию, если она не существует. Но индекс всегда для некоторых полей, а не для всех, поэтому, если я обеспечу индекс, скажем, { name:1 }, а затем добавлю документы в эту коллекцию, которые имеют много других полей, индекс будет работать? Я знаю, что у нас нет схемы, исходящей из мира RDBMS, я просто хочу убедиться. :) Я хотел бы создать индексы при запуске моего сайта, но изначально база данных пуста. Мне не нужно иметь никаких данных для обеспечения индексов, это правильно?

1 Ответ

10 голосов
/ 15 марта 2011

ensureIndex создаст коллекцию, если она еще не существует.Неважно, если вы добавляете документы, у которых нет свойства, охватываемого индексом, вы просто не можете использовать этот индекс для поиска этих документов.Насколько я понимаю, в версиях до 1.7.4 документ, в котором отсутствует свойство, для которого существует индекс, будет проиндексирован так, как если бы он имел это свойство, но будет иметь нулевое значение.В версиях после 1.7.4 вы можете создавать разреженные индексы, которые вообще не включают эти объекты.Разница незначительна, но может быть существенной в некоторых ситуациях.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...