2010-09-29 7 views
2

По умолчанию MongoDB создает индекс для ключа _id в документе. Но когда я обеспечиваю дополнительный индекс (вторичный, как в InnoDB от MySQL?) И запрашивает его после, движок сканирует его, а затем выборочно сканирует индекс _id, чтобы получить смещения документов?Как MongoDB управляет просмотром вторичных индексов?

Я смущен, потому что, когда появляется осколок, я прав, каждый кусок имеет собственные индексы и будет много случайных чтений за запрос?

ответ

7

Каждый осколок будет иметь свой собственный индекс (содержащий только документы в этом осколке), к ним будут доступны параллельно (каждый осколок считывает свой собственный локальный индексный осколок), и результаты объединяются. Это не случайные чтения, а чтение нескольких параллельных индексов. С точки зрения единого осколка это выглядит как обычный доступ к индексу.

Этот обводной указатель также является причиной того, что вторичные индексы не могут быть уникальными в среде осколков (нет единого глобального индекса, который мог бы обеспечить уникальность).

+0

shard состоит из кусков, что означает, что каждый кусок будет иметь свои собственные индексы, а параллельный индекс индекса осколков - использовать параллельные индексы chunk? – jlmfao

+0

@ inquisitor: Не уверен. Наличие индексов всех кусков одного и того же осколка, интегрированных в один индекс, кажется, имеет больше смысла. Но вы должны спросить об этом в списке рассылки MongoDB (а затем сообщить здесь). – Thilo

+0

, как вы говорите, все куски на одном и том же щите имеют одну и ту же структуру индекса (подтвержденный списком рассылки). – jlmfao

 Смежные вопросы

  • Нет связанных вопросов^_^