如何解决MongoDB博客架构设计
我想建立一个三级博客系统。
有三个级别。在第一页上,用户可以看到所有帖子,如果他打开帖子,他会看到更深一层的意见页面,其中包含意见,如果用户点击某个意见,他会看到评论。
这应该是这样的:
-Post(1.level)
--意见(2.级)
---评论(3级)
用户应该有权访问他发表的帖子和意见
-用户
--帖子[ ]
--意见 [ ]
现在想到的第一件事是将其构建为具有一个“帖子”集合的树模型。架构如下所示。
第一个变体:
const { model,Schema } = require("mongoose");
const postSchema = new Schema({
postBody: String,postBy: {
type: Schema.Types.ObjectId,ref: "User",},opinions: [
{
opinionBody: String,opinionBy: {
type: Schema.Types.ObjectId,comments: [
{
commentBody: String,commentBy: {
type: Schema.Types.ObjectId,],});
module.exports = model("Post",postSchema);
这是一种非常简单且快速的方法,但这样一来文档会变得非常大,而在 MongoDB 中,文档限制为 16MB。所以这是一种床上方法。
第二种变体:
将帖子、意见和评论放在单独的集合中,并将属于在一起的意见和评论捆绑在一起。
Post {
id: "post1",postBody: Post 1,postBy: "UserA"
opinionsBundleId: "opinionsBundle1"
}
Opinion [
{
id: "opinionsBundle1"
opinions [
{
opinionBody: Opinion 1
opinionBy: "UserB"
commentsBundleId: "commentsBundle1"
},{
opinionBody: Opinion 2
opinionBy: "UserC"
commentsBundleId: "commentsBundle2"
},]
},]
Comments [
{
id: "commentsBundle1"
comments [
{
commentBody: Comment 1
commentBy: "UserB"
},{
commentBody: Comment 2
commentBy: "UserD"
},]
},{
id: "commentsBundle2"
comments [
{
commentBody: Comment 1
commentBy: "UserB"
},]
对于第二个变体,我不知道 16MB 是否足够,但这样查询意见和评论时仍然很快。
第三种变体是将所有意见和评论放在一个单独的文件中。这样一个文档永远不会达到 16MB 的限制,但查询所有评论和意见会很糟糕。
我现在的问题是构建这样的系统的好方法是什么。如何构建“仍然快速”且可扩展的架构?提前致谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。