2

我是 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
}

现在我想我可以通过在用户集合中嵌入产品 ID 和标题来加快这个过程,这样我就不必在产品集合中搜索,只需读出并显示。但是如果我选择这种方式,每当产品的标题更新时,我也必须在用户集合中搜索和更新。我无法以第二种方式评估更新成本,所以我不知道哪种方式是正确的。请帮我在它们之间做出选择。

感谢和问候。

4

1 回答 1

3

您应该考虑更经常发生的情况:产品被重命名或请求用户信息。

您还应该考虑一个更大的问题:用户看到过时的产品名称的时间延迟(我们说的是几秒钟,当您拥有大量用户时可能是几分钟)或者在请求用户配置文件时总是有较长的响应时间.

在不知道您的实际使用模式和要求的情况下,我这两种情况都是后者,因此您应该针对这种情况进行优化。

一般来说,不建议像规范化关系数据库那样彻底规范化 MongoDB。原因是 MongoDB 无法执行 JOIN。因此,在多个文档中复制一些相关信息通常不是一个坏主意,同时接受更高的更新成本和潜在的不一致风险。

于 2013-10-25T09:43:08.963 回答