mongodb Mongo如何在博客文章示例中存储无限长的评论

7eumitmz  于 2022-11-03  发布在  Go
关注(0)|答案(2)|浏览(127)

我正在寻找建立一个博客系统,偶然发现了下面的博客. http://blog.mongolab.com/2012/08/why-is-mongodb-wildly-popular/
虽然很高兴看到我们可以将所有内容都存储在一个Mongo文档中作为一个json类型的对象(例如下面粘贴的博客中的json),而不是将数据分布在多个表中,但我很难理解这如何能够容纳一个假设的超长评论线程。

{
    _id: 1234,
    author: { name: "Bob Davis", email : "bob@bob.com" },
    post: "In these troubled times I like to …",
    date: { $date: "2010-07-12 13:23UTC" },
    location: [ -121.2322, 42.1223222 ],
    rating: 2.2,
    comments: [
       { user: "jgs32@hotmail.com",
         upVotes: 22,
         downVotes: 14,
         text: "Great point! I agree" },
       { user: "holly.davidson@gmail.com",
         upVotes: 421,
         downVotes: 22,
         text: "You are a moron" }
    ],
    tags: [ "Politics", "Virginia" ]
 }

除了注解键(表示为注解对象数组)之外,如果我们要使用关系数据库,允许我们在文档中存储无限数量的注解,而不是在需要连接操作的单独注解表中存储注解,其余字段(即作者、帖子、日期、位置、评级、标签)也都可以作为关系数据库表中的列来存储。
由于每个文档有16MB的限制,当这个博客吸引了很多评论时会发生什么?
还有,为什么我不能把json对象存储在关系数据库的列上呢?毕竟它是一个文本不是吗?

9fkzdhlc

9fkzdhlc1#

首先,澄清一下:MongoDB实际上存储BSON,它本质上是JSON的超集,支持更多的数据类型。
由于每个文档有16 MB的限制,当这个博客吸引了很多评论时会发生什么?
您将无法将大小增加到超过16 MB,因此您将无法添加更多评论。但您不需要存储博客文章文档中的所有评论。您可以存储第一个N,然后在添加新注解时将旧注解收回到注解集合中。可以将注解存储在另一个带有父引用的集合中。评论的存储方式应该与你期望它们被使用的方式相结合。16 MB的评论真的是太多了--你甚至可以有一个特殊的解决方案来处理偶尔出现的评论,这种方法与处理评论的正常方式完全不同。
我们可以将json存储在关系数据库中,那么我得到的Mongo的值是多少呢?
这里有两种存储JSON的方法(在MongoDB中)。

> db.test.drop()
> db.test.insert({ "name" : { "first" : "Yogi", "last" : "Bear" }, "location" : "Yellowstone", "likes" : ["picnic baskets", "PBJ", "the great outdoors"] })
> db.test.findOne()
{
    "_id" : ObjectId("54f9f41f245e945635f2137b"),
    "name" : {
        "first" : "Yogi",
        "last" : "Bear"
    },
    "location" : "Yellowstone",
    "likes" : [
        "picnic baskets",
        "PBJ",
        "the great outdoors"
    ]
}

var jsonstring = '{ "name" : { "first" : "Yogi", "last" : "Bear" }, "location" : "Yellowstone", "likes" : ["picnic baskets", "PBJ", "the great outdoors"] }'
> db.test.drop
> db.test2.insert({ "myjson" : jsonstring })
> db.test2.findOne()
{
    "_id" : ObjectId("54f9f535245e945635f2137d"),
    "myjson" : "{ \"name\" : { \"first\" : \"Yogi\", \"last\" : \"Bear\" }, \"location\" : \"Yellowstone\", \"likes\" : [\"picnic baskets\", \"PBJ\", \"the great outdoors\"] }"
}

你能使用关系数据库以第一种方式存储和使用JSON吗?与第一种方式相比,以第二种方式存储JSON有多大用处?
MongoDB和关系数据库之间还有很多其他的区别,这使得它们在各种用例中都比另一个更好--但是深入研究这一点对于SO的答案来说太宽泛了。

crcmnpdw

crcmnpdw2#

你能使用关系数据库以第一种方式存储和使用JSON吗?与第一种方式相比,以第二种方式存储JSON有多大用处?
对不起,你是说用Mongo json可以不使用转义字符来存储文档,而用RDBMS我必须使用转义字符来转义双引号吗?我不知道是这样的。

相关问题