这是 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 变量保持不变;“名称”和“网站”。
在这种情况下有什么更好的意见吗?如果您也有第三种解决方案,那就太好了。之前谢谢。