我是mongodb的新手,请建议我如何纠正以下情况的设计架构:
我有用户收藏和产品收藏。产品包含id,标题,描述,价格等信息...用户可以书签或喜欢产品。目前,在用户集合中,我存储了1个用于喜欢的产品的数组,以及1个用于加入书签的产品的数组。因此,当我需要查看有关1个用户的信息时,我必须读出这2个数组,然后搜索产品集合以获取喜欢和加入书签的产品的标题。
//User collection
{
_id : 12345,
name: "John",
liked: [123, 456, 789],
bkmark: [123, 125]
}
//Product collection
{
_id : 123,
title: "computer",
desc: "awesome computer",
price: 12
}
现在我想我可以通过在User集合中嵌入产品ID和标题来加快这个过程,这样我就不必在Product collection中搜索,只需阅读并显示。但是,如果我选择这种方式,每当产品的标题更新时,我也必须在用户集合中进行搜索和更新。我无法以第二种方式评估更新成本,因此我不知道哪种方式是正确的。请帮我在他们之间做出选择。
谢谢&问候。
答案 0 :(得分:3)
您应该考虑更频繁发生的事情:重命名产品或请求用户信息。
你还应该考虑一个更大的问题:用户看到一个过时的产品名称的时间滞后(我们谈论的是几秒钟,当你拥有非常多的用户时可能是几分钟)或者在请求时总是有更长的响应时间用户个人资料。
在不知道您的实际使用模式和要求的情况下,我会猜测在两种情况下都是后者,所以您应该针对这种情况进行优化。
一般情况下,不建议将MongoDB标准化为与规范化关系数据库一样激进。原因是MongoDB无法执行JOIN。因此,在多个文档中复制一些相关信息,同时接受更高的更新成本和潜在的不一致风险通常并不是一个坏主意。