Решение 1 мне кажется незавершенным, потому что в любом случае у вас должно быть хранилище всех пользователей.
Решение 2 Также может быть решением, и оно, вероятно, будет лучше, чем любая rdbms, потому что в базе данных документов вы не можете сделать «реальное» объединение, а это означает, что вы можете легко масштабировать свою систему .
В случае, если ваша система не будет такой большой, как SO, просто выберите Solution # 2.
Решение 3 Вам не нужно встраивать в вопрос всю пользовательскую информацию, просто вставьте информацию, которую вам нужно отобразить.
Так что лучшим решением для системы с высокой масштабируемостью будет:
Users
- первичное хранилище всей пользовательской информации, кроме того, здесь вы можете иметь количество вопросов, репутацию, количество ответов и любые статистические данные, которые вам нужны
Questions {ShortUserInfo {UserName, Reputation, GoldBadgetsCount, ...} }
- хранилище вопросов с информацией, связанной с пользователем, которую вам нужно отобразить
Answers
к конкретному вопросу, также должны быть включены в вопрос. И, вероятно, также будет содержать ShortUserInfo
(или около того).
Решение № 3 дает вам возможность легко масштабировать систему и сделать ее очень быстрой. Но когда пользователь обновляет свой профиль (или репутацию), вы должны обновлять эту информацию в каждом вопросе / ответе, но вы можете выполнять эту работу асинхронно, в этом случае информация может устареть на некоторое время, но это нормально. Вы можете изменить свой профиль SO и увидеть, что ваше имя пользователя может быть старым в некоторых вопросах / ответах.
Надеюсь, это поможет вам.