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

我已经听说了有关NoSQL的一些事情,并且可能最终成为SQL DB存储方法的替代品,因为数据库交互通常是networking速度的瓶颈。

所以我只有几个问题:

  1. 究竟是什么?

  2. 它是如何工作的?

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

  4. 技术是否太新,尚未开始实施?值得一看吗?

  1. 究竟是什么?

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

  2. 它是如何工作的?

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

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

    当你的站点需要大规模扩展时,最好的RDBMS运行在你能负担得起的最好的硬件上,而且尽可能地优化,这简直跟不上负载。 究竟是多less取决于具体的用例(大量的更新活动加上大量的连接对于传统的RDBMS非常困难) – 在极端情况下,可能是1000的因素。

  4. 技术是否太新,尚未开始实施?值得一看吗?

    主要取决于你想要达到的目标。 它的使用已经够成熟了。 但很less有应用程序需要大规模扩展。 对于大多数,传统的RDBMS就足够了。 但是,随着互联网的使用越来越普遍,很可能应用程序将变得更加普遍(尽pipe可能不占优势)。

没有NoSQL这样的东西!

NoSQL是stream行语。

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

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

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

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

其实不多。

你经常听到这样的话:

  • NoSQL是可扩展的!
  • NoSQL适用于BigData!
  • NoSQL违反ACID!
  • NoSQL是一个荣耀的关键/价值商店!

真的吗? 那么,对于一些通常称为NoSQL的数据库来说,这些陈述中的一些可能是正确的,但是对于至less另一个数据库来说,每一个数据库也是错误的 实际上,NoSQL数据库唯一的共同之处在于它们是不使用SQL的数据库。 而已。 定义它们的唯一因素是使它们彼此分开。

那么把NoSQL数据库分开的原因是什么

所以我们清楚地表明,所有那些通常被称为NoSQL的数据库都不一样,不能一起评估它们。 他们每个人都需要分别评估,以决定他们是否适合解决一个具体的问题。 但是我们从哪里开始呢? 值得庆幸的是,NoSQL数据库可以分为几类,适用于不同的用例:

文档导向

例子:MongoDB,CouchDB

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

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

graphics数据库

例子:Neo4j,GiraffeDB。

优势:数据挖掘

尽pipe大多数NoSQL数据库放弃了pipe理数据关系的概念,但这些数据库甚至比所谓的关系数据库更容忍它。

他们的重点是通过与其他数据的关系来定义数据。 当你有大量的表主键是其他两个表的主键(也可能是一些数据描述它们之间的关系),那么这些可能是你的东西。

键值存储

例如:Redis,Cassandra,MemcacheDB

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

他们是非常简单的,但这使得他们快速和易于使用。 如果您不需要存储过程,约束,触发器和所有这些高级数据库function,并且只需要快速存储和检索数据,那么这些就是为您准备的。

不幸的是,他们认为你确切地知道你在找什么。 你需要User157641的个人资料吗? 没问题,只需要几微秒。 但是当你想要所有年龄在16到24岁之间的用户的姓名时,最后24小时都有“华夫cookies”作为他们最喜欢的食物并login了吗? 倒霉。 当你没有一个明确的和独特的关键特定的结果,你不能轻易地从你的KV商店。

SQL是否过时?

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

他们是对的吗?

不,当然不是。 虽然有SQL不适合的问题,但它仍然有其优势。 大量的数据模型最好的performanceforms是一组相互引用的表格。 特别是因为大多数数据库程序员都是经过数十年的训练才能以关系的方式来思考数据,并试图将这种思维方式转化为一种新技术,而这种新技术并不是很好的结果。

NoSQL数据库不是SQL的替代品 – 它们是另一种select。

围绕不同NoSQL数据库的大多数软件生态系统还不成熟。 虽然有进步,但还没有得到像stream行的SQL数据库那样成熟和强大的补充工具。

另外,还有更多关于SQL的知识。 计算机科学家的几代人已经花费数十年的时间专注于关系数据库的研究,并且显示:关于SQL数据库和关系数据build模的实践和理论的文献可以填充多个图书馆。 如何为您的数据build立关系数据库是一个经过深入研究的主题,很难find一个没有被普遍接受的最佳实践的案例。

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

既然有人说我以前的post是无关紧要的话,我会尽力弥补:-) NoSQL并不是,也从来没有打算成为更多主streamSQL数据库的替代品,但是为了得到事情在正确的angular度。

NoSQL理念的核心在于考虑到,可能出于商业和便携的原因,SQL引擎倾向于忽视UNIX操作系统及其衍生物的巨大威力。

通过基于文件系统的数据库,您可以立即利用底层操作系统不断增长的function和能力,这些操作系统已经按照摩尔定律长期稳定增长。 使用这种方法,许多操作系统命令也会自动成为“数据库操作员”(想到“ls”,“sort”,“find”和其他无数UNIX shell实用程序)。

考虑到这一点和一些创造性,你的确可以devise一个基于文件系统的数据库,它能够克服许多常见SQL引擎的局限性,至less对于特定的使用模式来说,这是NoSQL理念背后的重点,我看到它的方式。

我运行了数百个网站,他们都在不同程度上使用NoSQL。 事实上,他们并不承载大量的数据,但即使其中有些人可能会想到创造性地使用NoSQL和文件系统来克服任何瓶颈。 传统SQL“监狱”可能会更困难一些。 我敦促你谷歌的“unix”,“manis”和“shaffer”明白我的意思。

如果我没有记错,它指的是不一定遵循关系forms的数据库types。 记住文档数据库,没有特定结构的数据库,不使用SQL作为特定的查询语言。

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

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

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

在这种情况下,间接地承认SQL模型的失败,以支持任何forms的OLTP或支持新的数据格式。 “支持”意味着不仅仅是存储,而是完整的存取function – 使用标准模型进行编程和查询。

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

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

这就像按摩浴缸:既是一个品牌,也是一个通用的名字。 这不仅仅是一个特定的技术,而是一个特定types的技术,在这种情况下指的是像BigTable或CouchDB这样的大型(通常是稀疏的)“数据库”。

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

正如Joel所说,像BigTable或HBase这样的大规模可扩展数据库更有趣。 GQL是与BigTable和App Engine关联的查询语言。 这主要是为了避免谷歌认为的瓶颈(如连接)的SQL调整。 不过,我还没有听说过这个被称为“NoSQL”的。

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

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

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

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

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

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

它如何在内部工作?

NoSQL数据库系统通常针对检索和附加操作进行高度优化,并经常提供超出logging存储(例如,键值存储)的function。 与完整的SQL系统相比,运行时间的灵活性降低可以通过某些数据模型的可伸缩性和性能的显着提升来弥补。

它可以在结构化和非结构化数据上工作。 它使用集合而不是表格

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

观看SQL vs NoSQL:后端之战 ; 它解释了这一切。