MongoDB - сохранение имени пользователя (изменяемого) в комментариях - встраивание против ссылок - PullRequest
1 голос
/ 19 января 2012

У меня новостная лента с комментариями.Я храню комментарии в MongoDB.Возможно, в будущем новостная лента может стать очень большой, поэтому мне нужна высокая скорость.

comments: [
    {user_id: 34, user_name: "John", text: "..."}
]

Как вы можете видеть, я также храню информацию о пользователе, потому что документы Монго говорят:нужна скорость, используйте встраивания ".

Но пользователь может изменить свое имя в любое время.В этом случае имя пользователя под каждым его комментарием в ленте новостей будет неправильным.

Должен ли я использовать ссылки ( DBref ) на коллекцию "User" по _id вместо встраивания?И насколько медленнее это будет?Это замедление достаточно велико, чтобы беспокоиться об этом?

Мне просто интересно, как все крупные социальные сети делают это.Когда я меняю имя пользователя, оно мгновенно обновляется во всех моих сообщениях в ленте новостей.

1 Ответ

3 голосов
/ 19 января 2012

Хранение DBRef не принесет вам никакой пользы по сравнению с хранением простых пользовательских идентификаторов.Это в основном тот же идентификатор, только с именем коллекции.

Если вам нужно быстрое эффективное чтение - вставьте.

Когда пользователь меняет свое имя, вы можете записать этот факт, а затем запустить ночную работу, которая обновит его кэшированное имя во всех комментариях.

Если вы хотите мгновенное обновление имени - вы должны ссылаться.Но в этом случае вы платите более сложным кодом и большим количеством запросов к базе данных.

...