我正在寻找建立一个博客系统,偶然发现了下面的博客. 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对象存储在关系数据库的列上呢?毕竟它是一个文本不是吗?
2条答案
按热度按时间9fkzdhlc1#
首先,澄清一下:MongoDB实际上存储BSON,它本质上是JSON的超集,支持更多的数据类型。
由于每个文档有16 MB的限制,当这个博客吸引了很多评论时会发生什么?
您将无法将大小增加到超过16 MB,因此您将无法添加更多评论。但您不需要存储博客文章文档中的所有评论。您可以存储第一个
N
,然后在添加新注解时将旧注解收回到注解集合中。可以将注解存储在另一个带有父引用的集合中。评论的存储方式应该与你期望它们被使用的方式相结合。16 MB的评论真的是太多了--你甚至可以有一个特殊的解决方案来处理偶尔出现的评论,这种方法与处理评论的正常方式完全不同。我们可以将json存储在关系数据库中,那么我得到的Mongo的值是多少呢?
这里有两种存储JSON的方法(在MongoDB中)。
你能使用关系数据库以第一种方式存储和使用JSON吗?与第一种方式相比,以第二种方式存储JSON有多大用处?
MongoDB和关系数据库之间还有很多其他的区别,这使得它们在各种用例中都比另一个更好--但是深入研究这一点对于SO的答案来说太宽泛了。
crcmnpdw2#
你能使用关系数据库以第一种方式存储和使用JSON吗?与第一种方式相比,以第二种方式存储JSON有多大用处?
对不起,你是说用Mongo json可以不使用转义字符来存储文档,而用RDBMS我必须使用转义字符来转义双引号吗?我不知道是这样的。