Будучи одним из самых популярных NoSQL-решений, MongoDB обладает большинством преимуществ этого подхода.Но одна проблема, с которой я все еще сталкиваюсь, заключается в том, как отразить объектные отношения в хранилище данных NoSQL, в частности - MongoDB.
Например, давайте рассмотрим простую модель данных: User, Post и Comment.Мне ясно, что комментарии не имеют никакой ценности сами по себе и, следовательно, становятся встроенными объектами для сообщений.Но когда дело доходит до пользователей - это становится сложнее, потому что Пользователь является сущностью, не связанной с Почтой.Теперь, если мне нужно вывести список сообщений с полными именами пользователей и ссылками на профили на веб-странице, мне потребуется список сообщений и информация об авторах сообщений (по крайней мере, имя и идентификатор).
Iсм. 2 возможных решения здесь:
- Денормализуйте данные таким образом, чтобы каждая запись в записи содержала идентификатор автора и полное имя (и любые другие атрибуты пользователя, которые могут понадобиться мне при перечислении записей).Таким образом, я бы сделал запрос данных очень простым, но когда каждый пользователь обновляет свой профиль, мне также необходимо обновить все сообщения пользователя.Но тогда мне нужно также хранить атрибуты пользователя в объектах комментариев, что означает, что обновление профиля пользователя по сути требует от меня обновления всех сообщений, которые содержат хотя бы один комментарий пользователя, если я не хочу хранить комментарии в отдельных коллекциях.
- Сохраняйте только идентификатор пользователя в объекте публикации и выполняйте 2 запроса: один для получения списка сообщений и другой для получения списка пользователей, в которых идентификатор пользователя находится в списке авторов сообщений.Это требует 2 запроса и дополнительной обработки в коде моего приложения, чтобы сопоставить пользователей с сообщениями.
Я уверен, что я не первый, кто сталкивается с этой проблемой, но, к сожалению, я не нашел лучших практикна эту тему пока.Мнения?