gpt4 book ai didi

mongodb - 对我的案例MongoDB模式设计的看法

转载 作者:可可西里 更新时间:2023-11-01 10:44:37 29 4
gpt4 key购买 nike

这是 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变量是不变的; “名称”和“网站”。

在这种情况下有什么更好的意见吗?如果您也有第三种解决方案,那就太好了。先谢谢了。

最佳答案

我认为将成员(member)详细信息分开保存是可以的,例如论坛签名。这样,当成员(member)更新他们的详细信息时,所有帖子都将显示他们的当前信息,而您的应用程序不必更新以前每个帖子中的重复数据。

从您的描述来看,您可能只在用户创建的博客帖子上显示此信息,而不是在他们在页面上发表的每条评论上显示。

如果您担心每个用户的额外查询的性能成本,您总是可以缓存该用户数据(或生成的页面输出),而不是依赖于在单个数据库查询中获取所有博客信息。在尝试优化可能不是问题的用例之前,我会先了解应用程序在实际使用中的表现。

另一种方法是仅将额外的用户详细信息显示为 Ajax 悬停(类似于 SO 如何显示 established user 的更多信息。

关于mongodb - 对我的案例MongoDB模式设计的看法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11806841/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com