MongoDB - 在注释中存储用户名(可更改) - 嵌入与引用

时间:2012-01-19 14:56:07

标签: performance mongodb social-networking news-feed

我有一条带有评论的新闻源。我在MongoDB中存储注释。新闻源可能会在未来变得非常大,所以我需要速度。

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

正如您所看到的,我也存储有关用户的信息,因为Mongo的文档说“当您需要速度时,请使用嵌入”。

但是用户可以随时更改他的名字。 在这种情况下,用户在新闻源中的每个评论下的名字都是错误的。

我应该通过_id而不是嵌入使用引用(DBref)到“用户”集合吗?它会慢多少?这种放缓是否足以引起人们的担忧呢?

我只是想知道所有大型社交网络是如何做到这一点的。当我更改用户名时,它会立即更新我在新闻源中的所有帖子。

1 个答案:

答案 0 :(得分:3)

存储DBRefs与存储简单的用户ID相比不会带来任何好处。它基本上是相同的id,只有一个集合名称。

如果你想快速有效读取 - 嵌入。

当用户更改他的名字时,你可以写下这个事实,然后运行一个夜间工作,在所有评论中更新他的缓存名称。

如果您想要即时更新名称 - 请参考。但在这种情况下,您需要向数据库支付更复杂的代码和更多查询。