Каков наилучший способ индексировать отношения «многие ко многим» в mongodb? - PullRequest
0 голосов
/ 07 января 2012

У меня есть две сущности.Пользователь и Товар со многими ко многим отношениям.Я буду читать / запрашивать

  1. элементов по идентификатору пользователя - 50% времени
  2. пользователей по идентификатору элемента - 50% времени

Запись производительности DOSNНе имеет значения.

Как хранить эти данные для лучшей производительности?

  1. user:{id:1, items:[1,2,3,4,5]} и индексировать по элементам
  2. аналогично для элементов, т. е. item:{id:1, users:[1,2,3,4,5]}
  3. дублировать данные и индексы только по идентификатору, т.е. u ser:{id:1, items:[1,2,3,4,5]} and item:{id:1, users:[1,2,3,4,5]}

1 Ответ

0 голосов
/ 07 января 2012

В вашем случае отношение должно храниться аналогично тому, как вы делали бы это в реляционной БД.У вас будет 3 коллекции: одна для пользователей, одна для элементов и коллекция отношений, где каждый документ имеет только одну связь пользователя с элементом.

Таким образом, любой запрос, чтобы получить пользователей для элемента или наоборот, потребует два запроса, один для коллекции отношений и один для «целевой» коллекции.Это определенно одна из тех ситуаций, когда СУБД работает лучше, но для большинства людей это справедливый компромисс, и если вы правильно настроили MongoDB, два запроса все равно будут очень быстрыми.данные, в дополнение к повышенным требованиям к хранилищу, в идеальном мире они будут работать, но у вас могут возникнуть проблемы с согласованностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...