什么是NoSQL?它如何工作?它提供什么好处?[关闭]


168

我一直在听有关NoSQL的事情,由于数据库交互通常是提高网络速度的瓶颈,因此它最终可能会替代SQL DB存储方法。

所以我有几个问题:

  1. 到底是什么

  2. 它是如何工作的?

  3. 为什么它比使用SQL数据库更好?那有什么好呢?

  4. 该技术是否太新而无法开始实施,还是值得一看?


这里有很多好的答案。在其他类似问题上,我也找到了有用的答案:(1.)150+否决汽车隐喻和大量参考资料来解释sql(2.)70+否决了nosql的历史解释了为什么/为什么创建nosql以及有关为什么今天存在
特雷弗·博伊德·史密斯

Answers:


110
  1. 到底是什么

    一方面,特定的系统已成为各种不遵循关系数据库模型的新数据存储后端的通用词。

  2. 它是如何工作的?

    标记有通用名称的每个系统的工作方式都不同,但是基本思想是通过使用不支持通用RDBMS的所有功能但仍然足够有用的数据库模型来提供更好的可伸缩性和性能。从某种意义上说,它就像MySQL,它曾一度缺乏对事务的支持,但正因为如此,它设法跑赢了其他数据库系统。如果您可以以不需要交易的方式编写应用程序,那就太好了。

  3. 为什么它比使用SQL数据库更好?那有什么好呢?

    如果您的站点需要如此大规模地扩展,以至于在您负担得起的最佳硬件上运行的最佳RDBMS并尽可能进行优化,则根本无法跟上负载的负担,那将是更好的选择。它的改善程度取决于特定的用例(在“传统” RDBMS上很难进行大量的更新活动,并且要进行大量的联接)–在极端情况下,可能是1000倍。

  4. 该技术是否太新而无法开始实施,还是值得一看?

    主要取决于您要实现的目标。它肯定已经成熟到可以使用。但是很少有应用程序真正需要大规模扩展。对于大多数人来说,传统的RDBMS就足够了。但是,随着互联网的使用越来越普遍,应用程序很有可能会变得越来越普遍(尽管可能不是主要的)。


2
什么意思transaction
肖恩·麦克林


“各种新数据存储后端”链接已失效
csguy

1
@csguy谢谢,取而代之的是消失的可能性较小
Michael Borgwardt

135

没有NoSQL之类的东西!

NoSQL是个流行词。

几十年来,当人们谈论数据库时,他们指的是关系数据库。当人们谈论关系数据库时,它们是指由Edgar F. Codd的结构化查询语言控制的那些数据库。以其他方式存储数据?疯狂!其他什么都只是平面文件。

但是在过去的几年中,人们开始质疑这种教条。人们想知道带有行和列的表是否真的是表示数据的唯一方法。人们开始思考和编码,并提出了许多新概念来组织数据。他们开始创建新的数据库系统,这些系统设计用于这些新的数据处理方式。

所有这些数据库的理念是不同的。但是所有这些数据库的共同点是,结构化查询语言不再适合使用它们。因此,每个数据库都用自己的查询语言替换了SQL。因此,NoSQL这个术语诞生了,它是所有违反经典关系数据库模型的数据库技术的标签。

那么NoSQL数据库有什么共同点?

其实不多。

您经常会听到类似的短语:

  • NoSQL是可扩展的!
  • NoSQL适用于BigData!
  • NoSQL违反了ACID!
  • NoSQL是美化的键/值存储!

真的吗?好吧,对于某些通常称为NoSQL的数据库,这些语句中的某些可能是正确的,但是至少每个其他语句也都是错误的。实际上,NoSQL数据库的唯一共同之处在于它们是不使用SQL的数据库。而已。定义它们的唯一一件事就是使它们彼此分开的原因。

那么,什么使NoSQL数据库与众不同?

因此,我们明确指出,所有那些通常称为NoSQL的数据库都太不同了,无法一起评估它们。他们每个人都需要分别评估,以决定它们是否适合解决特定问题。但是我们从哪里开始呢?幸运的是,NoSQL数据库可以分为某些类别,适用于不同的用例:

面向文件

示例:MongoDB,CouchDB

优势:异构数据,面向工作对象,敏捷开发

它们的优点是它们不需要一致的数据结构。当您的需求(从而数据库的布局)不断变化时,或者当您处理虽然属于一起但看起来又非常不同的数据集时,它们很有用。当您有很多带有两列的表,分别称为“键”和“值”时,这些表可能值得研究。

图形数据库

示例:Neo4j,GiraffeDB。

优势:数据挖掘

尽管大多数NoSQL数据库都放弃了管理数据关系的概念,但与那些所谓的关系数据库相比,这些数据库对它的支持更大。

他们的重点是通过数据与其他数据的关系来定义数据。如果您有很多带有主键的表,这些表是其他两个表的主键(也许还有一些描述它们之间关系的数据),那么这些表可能就很适合您。

关键值商店

示例:Redis,Cassandra,MemcacheDB

优点:通过已知键快速查找值

它们非常简单,但这使它们既快速又易于使用。如果您不需要存储过程,约束,触发器和所有这些高级数据库功能,而您只想快速存储和检索数据,那么这些就适合您。

不幸的是,他们假设您完全知道您要寻找的东西。您需要User157641的个人资料吗?没问题,只需要微秒。但是,当您希望所有16至24岁的用户的名字都以“华夫饼”作为他们最喜欢的食物并在最近24小时内登录时该怎么办?倒霉。当您没有确定结果的唯一确定键时,就无法轻易地将其从KV商店中删除。

SQL过时了吗?

一些NoSQL支持者声称,他们最喜欢的NoSQL数据库是新的做事方式,而SQL已经成为过去。

是吗

不,当然不是。尽管存在SQL不适合的问题,但它仍然具有优势。最好将大量数据模型最好地表示为相互引用的表的集合。尤其是因为大多数数据库程序员都经过数十年的培训,可以以关系方式思考数据,并且试图将这种思维方式推向新技术,而这种新技术却并非以失败而告终。

NoSQL数据库不是SQL的替代品-它们是替代品。

围绕不同NoSQL数据库的大多数软件生态系统尚未成熟。尽管取得了一些进步,但是您仍然没有像流行的SQL数据库一样成熟和强大的补充工具。

此外,还有更多有关SQL的知识。几代计算机科学家已经花费了数十年的职业生涯来专注于关系数据库的研究,并且表明:关于SQL数据库和关系数据建模的书面文献,无论是实用的还是理论的,都可以填满充满书籍的多个库。如何为您的数据建立关系数据库是一个经过深入研究的主题,很难找到一个没有普遍公认的最佳实践的极端案例。

另一方面,大多数NoSQL数据库仍处于起步阶段。我们仍在寻找使用它们的最佳方法。


我假设问题的答案是NoSQL是否表示非关系数据库?是否,因为图数据库也是NoSQL并且它们是关系数据库。正确?
tomasb

1
@tomasb这取决于您如何定义“关系数据库”。在图数据库中,关系比通常称为关系的数据库更重要。
菲利普

“没问题,只需要几微秒。” -无法在例如psql中获得相同的非事务性读取性能吗?
纳基隆

2
不错的答案,措辞几乎完全像亚当·亚当斯(Adam Ruins)一样,除了“ Philipp Ruins noSQL”之外,一切都
没错

2
这应该是最好的答案。

28

由于有人说我以前的帖子是题外话,所以我将尽力弥补:-) NoSQL并非也从未打算取代更主流的SQL数据库,但是为了达到目的,只用了两句话以正确的视角看待事物。

成为NoSQL哲学的核心在于这样的考虑,可能用于商业性和便携性的原因,SQL引擎往往忽略UNIX操作系统及其衍生物的巨大威力。

使用基于文件系统的数据库,您可以立即利用基础操作系统不断增长的功能和强大功能,根据摩尔定律,这些功能已经稳定增长了很多年。通过这种方法,许多操作系统命令也会自动变为“数据库操作员”(例如“ ls”,“ sort”,“ find”和其他无数的UNIX shell实用程序)。

考虑到这一点并有一些创造力,您确实可以设计一个基于文件系统的数据库,该数据库能够克服许多通用SQL引擎的局限性,至少对于特定的使用模式而言,这是NoSQL理念的根本。我看的方式。

我经营着数百个网站,它们或多或少都使用NoSQL。实际上,它们并没有托管大量数据,但是即使其中一些确实存在,我也可能想到了创造性地使用NoSQL和文件系统来克服任何瓶颈。使用传统的SQL“监狱”可能会更困难。我敦促您在Google中搜索“ unix”,“ manis”和“ shaffer”,以了解我的意思。


9

如果我没记错的话,它是指不一定遵循关系形式的数据库类型。想到的是文档数据库,没有特定结构的数据库,也不使用SQL作为特定查询语言。

通常,它更适合于依赖数据库性能的Web应用程序,并且不需要关系数据库引擎的更高级功能。例如,通过id接口提供简单查询的Key-> Value存储可能比相应的SQL Server实现快10-100倍,而开发人员的维护成本较低。

一个例子是这种用于OLTP元组存储,其中牺牲单线程处理交易(没有并发问题,因为没有并发允许的),并保存在存储器中的所有数据; 与类似的RDBMS驱动系统相比,性能提高了10到100倍。基本上,它已从SQL和数据库系统的“一刀切”视图中移开。


1
您第一个引用NoSQL的链接(标记为“ this”)似乎已死,请更正它。
jobin

7

实际上,NoSQL是一个数据库系统,它支持使用基于密钥的访问策略对大型二进制对象(文档,jpg等)进行快速访问。这与仅对字母数字值足够好的传统SQL访问有所不同。不仅内部存储和访问策略,而且显示格式的语法和限制都限制了传统的SQL。传统关系数据库的BLOB实现也遭受这些限制。

在幕后,这是对SQL模型无法支持任何形式的OLTP或对新数据格式的支持的间接承认。“支持”不仅意味着存储,还意味着完整的访问功能-使用标准模型以编程方式和查询方式。

关系狂热者迅速将NoSQL的定义从Not-SQL修改为Not-Only-SQL,以使SQL仍然有效!尤其是当我们看到当今大多数Java程序都诉诸于基础关系模型的ORM映射时,这并不是一件好事。一个新概念必须具有明确的定义。否则,它将最终像SOA一样。

NoSQL系统的基础在于随机键-值对。但是,这并不新鲜。像IMS和IDMS这样的传统数据库系统确实支持哈希随机密钥(不使用任何索引),并且仍然可以。实际上,IDMS已经有一个关键字NONSQL,它们在其中支持对旧网络数据库(称为NONSQL)的SQL访问。


5

这就像按摩浴缸:品牌和通用名称。它不仅是一种特定的技术,而且是一种特定类型的技术,在这种情况下,它指的是诸如Google的BigTable或CouchDB之类的大规模(通常是稀疏的)“数据库”。


5

NoSQL实际程序似乎是使用后端的平面文件在awk中实现的关系数据库。尽管他们宣称“ NoSQL本质上没有任何限制,并且可以在其他产品无法使用的地方使用。例如,数据字段大小,列数或文件大小没有限制”,但我认为这不是未来的大型数据库。

正如Joel所说,像BigTableHBase这样的可大规模扩展的数据库更加有趣。GQL是与BigTable和App Engine相关联的查询语言。很大程度上是对SQL进行了调整,以避免Google认为瓶颈(如联接)的功能。但是,我之前从未听说过这种称为“ NoSQL”的信息。


5

NoSQL是一个数据库系统,它不使用基于字符串的SQL查询来获取数据。

而是使用它们将提供的API来构建查询,例如Amazon DynamoDB是NoSQL数据库的一个很好的例子。

NoSQL数据库对于可伸缩性很重要的大型应用程序更好。


1

NoSQL是否表示非关系数据库?

是的,NoSQL与RDBMS和OLAP不同。与传统的关系数据库相比,它使用更宽松的一致性模型。

一致性模型用于分布式系统(如分布式共享内存系统或分布式数据存储)中。

内部如何运作?

NoSQL数据库系统通常针对检索和附加操作进行了高度优化,并且除记录存储(例如键值存储)外,通常提供的功能很少。与某些SQL模型相比,与完整的SQL系统相比,运行时灵活性降低了,这可以通过对某些数据模型的可伸缩性和性能的明显提高来弥补。

它可以处理结构化和非结构化数据。它使用集合而不是表

您如何查询这样的“数据库”?

观看SQL vs NoSQL:后端之战;它说明了一切。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.