Какова дополнительная нагрузка на sureIndex ({field: 1}), когда индекс уже существует? - PullRequest
4 голосов
/ 04 января 2011

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

Предполагая, что я устанавливаю новое соединение с БД при каждом веб-запросе, можно ли будет выполнять несколько операторов db.collection.ensureIndex ({field: true}) каждый раз, когда я подключаюсь?

1 Ответ

8 голосов
/ 04 января 2011

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

http://www.mongodb.org/display/DOCS/Indexes#Indexes-AdditionalNotesonIndexes

> db.system.indexes.find();

Вы можете запустить getIndexes (), чтобы увидеть индексы Коллекции

> db.things.getIndexes();

Так что на самом деле вы бы просто добавили один запрос; это не восстановило бы это или сделало бы что-нибудь еще неочевидное.

Тем не менее, Я не думаю, что это была бы особенно хорошая идея . Это добавит ненужные накладные расходы, и, что еще хуже, может заблокировать вашу базу данных при создании индекса ... поскольку по умолчанию создание индекса блокирует вашу базу данных (если вы не запускаете его в фоновом режиме), например так:

> db.things.ensureIndex({x:1}, {background:true});

Однако обратите внимание ...

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

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

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