什么是NoSQL,它是如何工作的,它提供了什么好处?

时间:2009-07-17 21:15:07

标签: database nosql

我一直在听NoSQL的事情,它最终可能成为SQL DB存储方法的替代品,因为数据库交互往往是网络速度的瓶颈。

所以我只有几个问题:

  1. 究竟是什么?

  2. 它是如何运作的?

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

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

9 个答案:

答案 0 :(得分:128)

没有NoSQL这样的东西!

NoSQL是一个流行语。

几十年来,当人们谈论数据库时,他们意味着关系数据库。当人们谈论关系数据库时,他们意味着你用Edgar F. Codd的结构化查询语言控制的那些数据库。以其他方式存储数据?疯狂!其他任何东西都只是平面文件。

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

所有这些数据库的哲学都不同。但是所有这些数据库有一个共同点,就是结构化查询语言不再适合使用它们。因此,每个数据库都用自己的查询语言替换SQL。因此NoSQL这个术语诞生了,作为所有数据库技术的标签,它违背了传统的关系数据库模型。

那么NoSQL数据库有什么共同之处?

实际上,并不多。

您经常会听到以下短语:

  • NoSQL是可扩展的!
  • NoSQL适用于BigData!
  • NoSQL违反了ACID!
  • NoSQL是一个美化的钥匙/超值商店!

这是真的吗?好吧,其中一些语句可能适用于一些通常称为NoSQL的数据库,但每一个数据库对于至少一个其他数据库也是假的。实际上,NoSQL数据库唯一的共同点就是它们是不使用SQL的数据库。就是这样。唯一定义它们的是使它们彼此分开的原因。

那么是什么让NoSQL数据库与众不同?

因此我们明确指出,所有通常被称为NoSQL的数据库都不同,无法将它们一起评估。需要对它们中的每一个进行单独评估,以确定它们是否适合解决特定问题。但是我们从哪里开始呢?值得庆幸的是,NoSQL数据库可以分为某些类别,这些类别适用于不同的用例:

<强>文档导向

示例:MongoDB,CouchDB

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

他们的优势在于他们不需要一致的数据结构。当您的需求和数据库布局不断变化,或者处理属于一起但看起来非常不同的数据集时,它们非常有用。当你有很多表有两列名为&#34; key&#34;和&#34;价值&#34;,然后这些可能值得研究。

图表数据库

示例:Neo4j,GiraffeDB。

优势:数据挖掘

虽然大多数NoSQL数据库都放弃了管理数据关系的概念,但这些数据库比那些所谓的关系数据库更容易接受它。

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

键值商店

示例:Redis,Cassandra,MemcacheDB

优势:通过已知密钥快速查找值

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

不幸的是,他们认为你确切地知道你在寻找什么。您需要User157641的个人资料吗?没问题,只需几微秒。但是当你想要年龄在16到24岁之间的所有用户的名字时,有什么&#34;华夫饼干&#34;作为他们最喜欢的食物并在过去24小时内登录?倒霉。如果您没有明确且唯一的特定结果密钥,则无法轻松地将其从K-V商店中取出。

SQL过时了吗?

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

他们是对的吗?

不,当然他们不是。虽然SQL不适合存在问题,但它仍然有其优势。许多数据模型最好表示为相互引用的表的集合。特别是因为大多数数据库程序员都经过数十年的训练才能以关系的方式思考数据,并且试图将这种思维模式推向一种新的技术,而这项技术并没有很好地结束。

NoSQL数据库不是SQL的替代品 - 它们是另一种选择。

围绕不同NoSQL数据库的大多数软件生态系统尚未成熟。虽然有了进步,但您仍然无法获得与流行SQL数据库相同的补充工具。

此外,SQL还有更多的专业知识。几代计算机科学家将他们几十年的职业生涯投入到关注数据库的研究中,它表明:关于SQL数据库和关系数据建模的文献,无论是实践还是理论,都可以填满多个图书馆。如何为您的数据构建关系数据库是一个经过深入研究的主题,很难找到一个不存在普遍接受的最佳实践的角落案例。

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

答案 1 :(得分:108)

  1. 究竟是什么?

    一方面是specific system,但它也成为不遵循关系数据库模型的variety of new data storage backends的通用词。

  2. 如何运作?

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

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

    如果您的网站需要如此大规模地扩展,以便在您能够承受并尽可能优化的最佳硬件上运行的最佳RDBMS无法跟上负载,那就更好了。它的好坏取决于具体的用例(许多更新活动与大量连接相结合对于“传统的”RDBMS来说非常困难) - 在极端情况下很可能是1000倍。

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

    主要取决于你想要实现的目标。它当然足够成熟,可以使用。但很少有应用程序确实需要大规模扩展。对于大多数人来说,传统的RDBMS就足够了。然而,随着互联网使用越来越普遍,很可能这些应用程序将变得更加普遍(尽管可能不是主导)。

答案 2 :(得分:27)

由于有人说我以前的帖子偏离主题,我会尽力补偿:-) NoSQL不是,而且从来没有打算成为更主流的SQL数据库的替代品,但是有几个词在为了让事情从正确的角度出发。

NoSQL philosophy的核心在于考虑到,可能出于商业和可移植性的原因,SQL引擎倾向于忽视UNIX操作系统及其衍生产品的巨大威力。

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

考虑到这一点,以及一些创造力,您确实可以设计一个基于文件系统的数据库,它能够克服许多常见SQL引擎的限制,至少对于特定的使用模式,这是NoSQL的背后的全部要点哲学,我看待它的方式。

我运行了数百个网站,他们都或多或少地使用NoSQL。实际上,它们并不存储大量数据,但即使其中一些数据存在,我也可能会想到NoSQL和文件系统的创造性使用以克服任何瓶颈。传统的SQL“jails”可能会更加困难。我敦促你谷歌为“unix”,“manis”和“shaffer”来理解我的意思。

答案 3 :(得分:8)

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

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

一个例子是paper元组存储的OLTP,它牺牲了单线程处理的事务(没有并发问题,因为不允许并发),并将所有数据保存在内存中;与类似的RDBMS驱动系统相比,性能提高了10-100倍。基本上,它正在远离SQL和数据库系统的“One Size Fits All”视图。

答案 4 :(得分:5)

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

在场景背后,间接承认SQL模型无法支持任何形式的OLTP或支持新的数据格式。 “支持”不仅意味着存储而且意味着完全访问功能 - 使用标准模型进行编程和查询。

关系爱好者很快就将NoSQL的定义从Not-SQL修改为Not-Only-SQL,以使SQL保持在图片中!这并不好,特别是当我们看到今天大多数Java程序采用底层关系模型的ORM映射时。新概念必须有明确的定义。否则它最终会像SOA一样。

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

答案 5 :(得分:4)

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

答案 6 :(得分:4)

NoSQL实际程序似乎是使用后端平面文件在awk中实现的关系数据库。虽然他们声称,“NoSQL基本上没有任意限制,并且可以在其他产品不能的地方工作。例如,对数据字段大小,列数或文件大小没有限制”,我不认为它是未来的大型数据库。

正如乔尔所说,像BigTableHBase这样的大规模可扩展数据库更有趣。 GQL是与BigTable和App Engine关联的查询语言。它主要是SQL调整,以避免谷歌认为瓶颈(如连接)的功能。但是,我之前没有听说过这个被称为“NoSQL”的内容。

答案 7 :(得分:3)

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

相反,您使用他们将提供的API构建查询,例如,Amazon DynamoDB是NoSQL数据库的一个很好的示例。

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

答案 8 :(得分:0)

  

NoSQL是否意味着非关系型数据库?

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

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

  

内部如何运作?

NoSQL数据库系统通常针对检索和追加操作进行了高度优化,并且通常提供除记录存储之外的很少功能(例如,键值存储)。与完整SQL系统相比,运行时灵活性的降低得益于某些数据模型的可扩展性和性能的显着提升。

它可以处理结构化和非结构化数据。它使用Collections而不是Tables

  

您如何查询此类“数据库”?

观看SQL vs NoSQL: Battle of the Backends;它解释了一切。