Большое изменение от реляционной базы данных к NoSQL будет денормализация .В зависимости от того, как часто имя пользователя изменяется в вашей системе, вы можете просто добавить имя пользователя в коллекцию orders
( таблица в реляционных терминах).
Итак, ваша orders
схема сбора будет выглядеть так:
{"userId":"abc123", "userName": "Some Name", "orderId":"someorderId","amount":153.23}
Вы можете использовать простые find()
запросы для получения данных о заказах и пользователях.Если изменить имя, это будет multi-document-update , но если это случается не часто, это не так уж и плохо.Один раз в обновлениях Blue Moon, денормализация хороша, поскольку она приносит пользу чтению.Опять же, это не эмпирическое правило, но это полностью зависит от вашего варианта использования и дизайна, чтобы учитывать соотношение чтение: запись.
Если имя пользователя меняется очень часто, и вы не хотите денормализовать, то вы всегда можете кэшировать карту userId to userName с соответствующим TTL и искать ID -> Name на уровне приложения.вместо того, чтобы использовать базу данных для наложения бизнес-ограничений.
Вам не понадобится map-Reduce, чтобы просто извлекать заказы и пользователей - если только вы не выполняете массовое агрегирование данных.