【发布时间】:2012-08-02 03:48:17
【问题描述】:
这是 MongoDB 上一个很常见的问题:何时嵌入以及何时引用。
但是在我的情况下,这似乎是一个两难的选择。我有一个文档,其中包含我可以嵌入它的参考,但它会花费我磁盘的大小。但是如果我做一个参考,它会给我带来相当大的性能成本。
这是一个例子,假设我有这个会员,我的问题是“详细信息”:
Member: {
_id: "abc",
detail: {
name: "Stack Overflow",
website: "www.stackoverflow.com"
}
}
我希望此会员的详细信息出现在此会员“asdf”创建的每个博客中,因为显示的每个博客都会显示会员详细信息。所以我可以为我的博客文档做 2 个选项:
首先,只放会员的_id作为参考:
Blog: {
_id: 123,
memberId: "asdf" ---> will be used as reference to query specific member
}
或者第二,将成员嵌入到博客中:
Blog: {
_id: 123,
member: {
_id: "asdf",
detail: {
name: "Stack Overflow",
website: "www.stackoverflow.com"
}
}
}
所以第一个选项需要另一个成员查询,这是一个性能问题。然而,第二个选项更快,因为我只需要查询一次,但是随着博客数量的增长,我的磁盘会因为嵌入文档“成员”的冗余数据而变得更大。
PS:从这个例子可以看出,Member 和Blog 的关系是一对多的,所以一个member 可以有很多blog,但是member 的detail 变量保持不变; “名称”和“网站”。
在这种情况下有什么更好的意见吗?如果您也有第三种解决方案,那就太好了。之前谢谢。
【问题讨论】:
标签: mongodb database-design database-schema schema-design database