mongodb 为什么称为NoSQL?

jm81lzqq  于 2022-11-22  发布在  Go
关注(0)|答案(4)|浏览(167)

我最近在MongoDB工作,了解了它的无模式设计。但是,我对NoSQL这个术语感到困惑?为什么叫它?它不使用SQL或类似SQL的查询吗?
我还从article中读到,主要的区别在于数据是如何存储的。这是真的吗?在MongoDB的例子中,它像JSON文档一样存储。
还有,我很困惑为什么我总是看到“NoSQL vs关系数据库”。NoSQL数据库不是关系数据库吗?我相信MongoDB中的文档仍然是通过一些键相关/链接的(如果我错了,请纠正我)。那么为什么它被标记为非关系数据库呢?
提前感谢!

eqqqjvef

eqqqjvef1#

事实上,“NoSQL”这个名字是Carlo Strozzi在1998年首次使用的,当时他正在开发基于文件的数据库,讽刺的是,它是关系数据库。Wiki
下面是一些名人对“nosql”的评价:
Eric Evans(机架空间):
“我在nosqleast呆了几天,这里的一个热门主题是“nosql”这个名字。可以理解,有很多人担心这个名字不好,它会传递一个不恰当或不准确的信息。虽然我没有声明这个想法,我不得不为它现在的名字接受一些指责。怎么样?约翰·奥斯卡森组织了第一次聚会,问了一个问题:“什么是一个好名字?”“在IRC上,这是我在45秒内不假思索地说出的3或4个建议之一。
然而,我的遗憾并不在于这个名字,而是它没有表达什么。当Johan最初提出第一次会面的想法时,他似乎想到了大数据和线性可扩展的分布式系统,但这个名字太模糊了,以至于它打开了谈论任何存储数据的东西的大门,而不是RDBMS。”
Martin Fowler
“确实,这个名字本身经常有一个转折:许多NoSQL的拥护者说这并不意味着对SQL的“不,”在这一点上,我认为将单个数据库与NoSQL倡导者认为是未来的生态系统区分开来是有用的。当我们说“x是一个NoSQL数据库”时,我认为将NoSQL解释为“不仅”是愚蠢的,因为这将使这个术语变得毫无意义。(您可以合理地认为SQL Server(比如)是一个NoSQL数据库。)因此,我认为最好说“NoSQL数据库”是一个“no-sql”数据库。”

2ul0zpep

2ul0zpep2#

它不使用SQL或类似SQL的查询吗?
虽然“非关系数据库”可能是一个更准确的名称,但它们中的大多数实际上并不使用SQL或类似的东西。
NoSQL数据库不是关系型的吗?我相信MongoDB中的文档仍然是通过一些键相关/链接的(如果我错了,请纠正我)。那么为什么它被标记为非关系型的呢?
NoSQL数据库是非关系数据库。
它们有各种各样的风格(主要是“文档数据库”、“键值存储”和“图形数据库”),但通常不会获得以下任何或所有“关系”特性:

  • 定义具有结构描述的数据表(具名数据行,通常为具类型的数据行)
  • 能够在单个查询中联接多个表
  • 任意范围的长时间运行的孤立事务
  • 即席查询可能需要很长时间,并且有许多方法可以对数据进行索引以提高查询速度(而不是必须更改整个数据库布局)

(What通过放弃其中一些便利的功能,您可以获得更好的性能、可用性和可伸缩性)。

3xiyfsfu

3xiyfsfu3#

正如维基所说:
[NoSQL]是一个广泛的数据库管理系统类别,它不遵守广泛使用的关系数据库管理系统模型。
这意味着它是一个不遵守关系模型(Codd的模型)的数据库,因此它不使用SQL。

smdnsysy

smdnsysy4#

我经历了这个流行词的演变,我看到了:

  • 20世纪90年代:主流数据库都使用结构化查询语言(SQL)和关系模型。(如MySQL、PgSQL、Oracle)这些数据库越来越多地竞争一个整体厨房Flume模型--一个可以做所有事情的数据库,但需要昂贵的咨询和支持包来调整配置。还需要驱动程序,因为协议和序列化格式通常是不透明的专有二进制格式。
  • 2000年代:开源社区中的个人开始了一种反文化的小型/特定数据存储软件解决方案,这些解决方案非常好地管理了一种特定类型的数据。(如Redis、AWS S3、Couchbase)在每一个案例中,作者都采用了第一原理方法,从根本上重新发明了查询语言,这是数据模型在每一个案例中如何变化的不可避免的反映。这些存储解决方案中的任何一个都不能使用SQL。HTTP请求和JSON逐渐成为流行的查询、驱动程序和序列化介质。同样,数据模型也在向高度可定制的用户定义格式发展,包括二进制结构和非结构化文档数据。
  • 2010年代:Google的MapReduce论文引起了轰动,催生了专门针对大数据的数据存储解决方案的整个生态系统。(即MongoDB、Cassandra、Hadoop系列、Riak和云提供商专有托管/托管克隆)在许多情况下,他们试图通过填补只懂SQL的老工程师/客户差距来赢得市场份额,通过提供类似SQL的查询语法,可以在后台转换/扩充该语法以适应新的格式。
  • 在这一点上,Oracle,移动购买MySQL,并从这一点上,我们见证了一个不可逆转的下降和整合,在市场上的经典SQL为基础的关系数据库。

注意:SQL是一个涉及语言语法的术语,而不是数据模型。它并不特别绑定到关系表数据(例如,Hadoop Pig与Hadoop Impala)
我所记得的:当NoSQL作为一个时髦词首次亮相时,它真正的意思是“没有结构化查询语言”。
我相信:在某种程度上,像Oracle和Microsoft这样的大公司感受到了与这些解决方案竞争的压力,他们通过扩展其整体解决方案来支持“除SQL之外”的数据模型和查询语言。因此,他们的营销团队转而使用/混淆术语来表示“不仅仅是SQL”,试图保持相关性。
但是“不仅仅是结构化查询语言”没有意义,因为它的含义与其原始含义完全相反。如果我们指的是数据存储解决方案家族,包括那些使用SQL的解决方案,那么我们没有做出任何有意义的区分--该类别将包括所有数据库,甚至是1990年以前的数据库,但不包括最初在2000年普及该术语使用的现代创新数据库。

相关问题