我希望建立一个博客系统,并发现了以下博客。 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对象?毕竟它的文字不是吗?
答案 0 :(得分:1)
首先,澄清一下:MongoDB实际上存储了BSON,它实际上是支持更多数据类型的JSON的超集。
由于每个文档的限制为16MB,当此博客吸引大量评论时会发生什么?
您无法将大小增加到16MB以上,因此您将无法添加更多评论。但是,您不需要将所有评论存储在博客文章中。您可以存储第一个N
,然后在添加新注释时将旧注释退回到注释集合。您可以使用父引用将注释存储在另一个集合中。存储注释的方式应该与您期望它们的使用方式相吻合。 16MB的评论确实很多 - 你甚至可能有一个特殊的解决方案来处理偶尔发布这种活动的帖子,这种方法与处理评论的正常方式完全不同。
我们可以将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答案来说太宽泛了。
答案 1 :(得分:0)
您可以使用关系数据库以第一种方式存储和使用JSON吗? 与第一种方式相比,JSON以第二种方式存储有多大用处?
对不起,您是否建议使用Mongo json文件可以不使用转义字符进行存储,而使用RDBMS我必须使用转义字符来转义双引号?我不知道是这样的。