Одна из вещей, которые мы узнаем из видеоролика «Index Cardinality» [M101J: MongoDB для разработчиков Java], заключается в том, что когда документ с мультикидным индексом перемещается, все его индексы также должны быть обновлены, что несут значительные накладные расходы.Предложение по улучшению индексов MongoDB
Я думал, что можно каким-то образом обойти это ограничение. Очевидным решением является добавление еще одного уровня косвенности (это известный шаблон для решения проблем компьютерной науки :-)), и вместо ссылки на документ непосредственно из индекса мы создаем сущность для каждого документа, который ссылается на этот документ и получает индексы для ссылки на этот объект, и теперь, когда мы перемещаем документ, нам нужно только модифицировать эту сущность (объект никогда не будет перемещаться, потому что его форма BSON всегда будет одинаковой). Проблема с этим решением, конечно, в том, что для торгового пространства для производительности (индексы также страдают от этой проблемы).
Но всякая надежда не потеряна; в MongoDB все документы имеют неизменяемое поле _id, которое автоматически индексируется. Учитывая все это, мы знаем, что если документ когда-либо перемещается, его связанный индекс _id также будет обновляться, поэтому почему бы не просто сделать все остальные индексы ссылками на соответствующий индекс _id документа?
Учитывая это решение, единственным индексом, который когда-либо будет обновляться при перемещении документа, является индекс _id.
Я хочу знать, может ли это решение быть реализовано в MongoDB или есть некоторые скрытые ошибки, которые сделают его непрактичным?
Благодаря
Это похоже на публикацию на jira.mongodb.org или в каком-либо обсуждении mongo. –
Не требует ли загрузка документов BSON для проверки индекса? – Sammaye
Это именно то, что мы делаем в TokuMX (дистрибутив MongoDB с улучшенным хранилищем), и мой коллега на самом деле просто написал об этом здесь: http://www.tokutek.com/2014/02/the-effects-of-database- куча-хранения-выбор-в-MongoDB / – leif