@ Гарет , у вас есть несколько законных способов сделать это.Поэтому их ключевой проблемой является то, как вы планируете запрашивать данные (т.е.: какие запросы должны быть быстрыми )
Вот несколько методов.
Метод № 1: коллекция «ссылок»
Вы можете создать коллекцию, которая просто содержит сопоставления между коллекциями.
Плюсы:
- Поддерживает атомарные обновления, чтобы данные не терялись
Минусы:
- Дополнительный запрос при попытке перемещения между коллекциями
Метод № 2: хранить копии небольших сопоставлений в большой коллекции
Например: у вас есть миллионы Products
, но только сотня Categories
,Тогда вы должны хранить Categories
как массив внутри каждого Product
.
Плюсы:
- Наименьшая площадь
- Требуется толькоодно обновление
Минусы:
- Дополнительный запрос, если вы идете "неправильным путем"
Метод № 3: хранить копии всех отображений в обеих коллекциях
(что вы предлагаете)
Плюсы:
- Доступ к одному запросу для перемещения между коллекциями
Минусы:
- Потенциально большие индексы
- Требуются транзакции (?)
Давайте поговорим о «транзакциях потребностей».Существует несколько способов выполнения транзакций, и это действительно зависит от того, какой тип безопасности вам необходим.
Следует ли мне использовать безопасный режим и вручную проверять данные, поступившие впоследствии, и повторять попытку в случае сбоя?
Вы определенно можете это сделать.Вы должны спросить себя, что хуже всего случится, если произойдет сбой только одного из сохранений?
Метод # 4: поставить в очередь изменения
Не знаюЗнайте, работали ли вы когда-либо с очередями, но если у вас есть некоторая свобода действий, вы можете создать простую очередь и иметь разные задания, которые обновляют их соответствующие коллекции.
Это гораздо более продвинутое решение.Я бы предпочел пойти с № 2 или № 3.