mongodb: структура индексации с несколькими ключами? - PullRequest
15 голосов
/ 13 сентября 2011

Мне трудно понять, как именно выполняется индексация для мультиключей в mongodb.

Вот что я читал о мультиключах в документации mongodb на его веб-сайте:
1) "Создание индексав результате индексации элемента массива база данных индексирует каждый элемент массива "
2)" ... будет индексировать все теги в документе и создавать записи индекса для "X", "Y" и "Z"для этого документа. "

Итак, что именно это означает под индексными записями для этого документа?Каждый документ помнит записи, и в этом случае поиск будет полным просмотром таблицы?Или это тот же самый индекс b-дерева mysql, где каждая запись индекса будет указывать на несколько документов для каждого соответствующего случая, и в этом случае я слишком много думаю.

Давайте рассмотрим пример:
obj1 = { <br> name: "Apollo",<br> text: "Some text about Apollo moon landings",<br> tags: [ "moon", "apollo", "spaceflight", "nasa" ]<br> }<br>

obj2 = { <br> name: "Atlantis",<br> text: "Some text about Atlantis flight missions",<br> tags: [ "space", "atlantis", "spaceflight", "nasa" ]<br> }<br>

>db.articles.ensureIndex( { tags : 1 } )

Пожалуйста, помогите мне понять!Заранее спасибо.

Ответы [ 2 ]

21 голосов
/ 13 сентября 2011

В этом случае ваш индекс (который является B-деревом) будет выглядеть так:

 apollo => [ obj1 ]
 atlantis => [ obj2 ]
 moon => [ obj1 ]
 nasa  => [ obj1, obj2 ]
 space => [ obj2 ]
 spaceflight => [ obj1, obj2 ]

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

1 голос
/ 10 февраля 2014

Я думаю, вы неправильно поняли разницу между индексами Multiindex и Compound:

Составные индексы - это пользовательские индексы для нескольких полей одновременно. Индексы Multykey: MongoDB определяет, является ли поле, для которого выпущен Индекс, массивом, и создает индекс для каждого из элементов массива, например

db.user.ensureIndex ({ "address.street": 1});

В этом случае и поскольку целевое поле является массивом, индекс будет хранить все элементы, но только один раз.

Я настоятельно рекомендую вам взглянуть на эту простую статью, которая прояснит вам сомнения относительно простых типов imdex в MongoDB: http://mongodbspain.com/en/2014/01/24/mongodb-indexes-part1/

С уважением,

...