Mongodb: структура индекса Multikey?
Мне трудно понять, как именно индексирование выполняется на multikeys в mongodb.
Это то, что я читал о мультики в документах mongodb на своем веб-сайте:
1) "Создание индекса по индексам элементов массива приводит к индексированию базы данных каждого элемента массива"
2) "... индексирует все теги в документе и создает записи индекса для" X "," Y "и" Z "для этого документа."
Итак, что именно это означает для записей индекса для этого документа? Означает ли каждый документ записи, и в этом случае поиск будет полным сканированием таблицы? Или это тот же индекс b-tree mysql, где каждая запись индекса указывает на несколько документов для каждого соответствующего события, и в этом случае я слишком много думаю.
Возьмем пример:
obj1 = {
name: "Apollo",
text: "Some text about Apollo moon landings",
tags: [ "moon", "apollo", "spaceflight", "nasa" ]
}
obj2 = {
name: "Atlantis",
text: "Some text about Atlantis flight missions",
tags: [ "space", "atlantis", "spaceflight", "nasa" ]
}
>db.articles.ensureIndex( { tags : 1 } )
Пожалуйста, помогите мне понять! Спасибо, заранее.
Ответы
Ответ 1
В этом случае ваш индекс (который является B-деревом) будет выглядеть так:
apollo => [ obj1 ]
atlantis => [ obj2 ]
moon => [ obj1 ]
nasa => [ obj1, obj2 ]
space => [ obj2 ]
spaceflight => [ obj1, obj2 ]
Это просто "обычный" индекс B-дерева, за исключением того, что каждый документ может появляться более одного раза (он появляется один раз для каждого уникального значения тега).
Ответ 2
Я думаю, вы неправильно поняли разницу между индексами Multiindex и Compound:
Компонентные индексы являются определяемыми пользователем индексами для нескольких полей одновременно.
Множественные индексы: MongoDB определяет, является ли поле, на котором выпущен индекс, массив и создает индекс для каждого из элементов массива, например
db.user.ensureIndex({ "address.street": 1});
В этом случае и потому, что целевое поле является массивом, индекс будет хранить все элементы, но только один раз.
Я очень рекомендую вам взглянуть на эту простую статью, которая разъяснит вам сомнения в отношении простых типов imdex в MongoDB: http://mongodbspain.com/en/2014/01/24/mongodb-indexes-part1/
Привет,