我有一条带有评论的新闻源。我在MongoDB中存储注释。新闻源可能会在未来变得非常大,所以我需要高速度。
comments: [
{user_id: 34, user_name: "John", text: "..."}
]
正如您所看到的,我也存储有关用户的信息,因为Mongo的文档说“当您需要速度时,请使用嵌入”。
但是用户可以随时更改他的名字。 在这种情况下,用户在新闻源中的每个评论下的名字都是错误的。
我应该通过_id而不是嵌入使用引用(DBref)到“用户”集合吗?它会慢多少?这种放缓是否足以引起人们的担忧呢?
我只是想知道所有大型社交网络是如何做到这一点的。当我更改用户名时,它会立即更新我在新闻源中的所有帖子。
答案 0 :(得分:3)
存储DBRefs与存储简单的用户ID相比不会带来任何好处。它基本上是相同的id,只有一个集合名称。
如果你想快速有效读取 - 嵌入。
当用户更改他的名字时,你可以写下这个事实,然后运行一个夜间工作,在所有评论中更新他的缓存名称。
如果您想要即时更新名称 - 请参考。但在这种情况下,您需要向数据库支付更复杂的代码和更多查询。