Одна из вещей, которую мы узнали из видео «Index Cardinality» [M101J: MongoDB для разработчиков Java], заключается в том, что при перемещении документа с многоключевым индексом все его индексы также должны быть обновлены, что влечет за собой значительные накладные расходы.
Я подумал, можно ли как-то обойти это ограничение. Очевидное решение состоит в том, чтобы добавить еще один уровень косвенности (это известный шаблон для решения компьютерных задач :-)) и вместо того, чтобы ссылаться на документ непосредственно из индекса, мы создаем объект для каждого документа, который ссылается на этот документ, и получаем индексы. для ссылки на этот объект, и теперь, когда мы перемещаем документ, нам нужно изменить только этот объект (объект никогда не будет перемещаться, потому что его форма BSON всегда будет одинаковой). Проблема с этим решением, конечно же, заключается в обмене места на производительность (индексы также страдают от этой проблемы).
Но вся надежда не потеряна; в MongoDB все документы имеют неизменяемое поле _id, которое автоматически индексируется. Учитывая все это, мы знаем, что если документ когда-либо будет перемещен, связанный с ним индекс _id также будет обновлен, так почему бы просто не сделать все остальные индексы ссылками на соответствующий индекс _id документа?
Учитывая это решение, единственный индекс, который будет когда-либо обновляться при перемещении документа, — это индекс _id.
Я хочу знать, может ли это решение быть реализовано в MongoDB или есть какие-то скрытые ошибки, которые сделают его непрактичным?
Спасибо