什么是NoSQL——【解释NoSQL数据库】

什么是NoSQL?解释NoSQL数据库

SQL数据库对数据类型和一致性有限制。Nosql为了速度、灵活性和规模,抛弃了它们。

 

What is NoSQL? NoSQL databases explained

 

开发应用程序时最基本的选择之一是使用SQL或NoSQL数据库存储数据。传统的SQL数据库(即关系数据库)是几十年技术进步、良好实践和现实世界压力测试的产物。它们是为可靠的事务和临时查询而设计的,这是业务应用程序的支柱。但它们也背负着一些限制-好比僵化的模式-使得它们不太适合其余类型的应用程序。html

NoSQL数据库是针对这些限制而出现的。NoSQL系统存储和管理数据的方式容许开发人员以较高的操做速度和极大的灵活性。许可能是由谷歌、亚马逊、雅虎和Facebook等公司开发的,它们寻求更好的方法来存储内容或为大型网站处理数据。与SQL数据库不一样,许多NoSQL数据库能够在数百或数千台服务器上水平缩放。java

[您应该使用哪一个NoSQL数据库?让InfoWorld作你的向导。NoSQL怨恨匹配:MongoDB和Couchbase Server从头到头. • Nosql突出:最好的键值数据库. • NoSQL突出:最好的文档数据库.\x{e76f}跟上InfoWorld编程中最热门的主题应用程序开发报告通信. ]sql

不过,NoSQL的优势并非没有代价的。NoSQL系统一般不提供与SQL数据库相同的数据一致性级别。实际上,虽然SQL数据库传统上牺牲了性能和可伸缩性,可是酸性质在可靠事务的背后,NoSQL数据库在很大程度上放弃了对速度和可伸缩性的严格保证。mongodb

简而言之,SQL和NoSQL数据库提供了不一样的权衡。虽然他们能够在特定项目的背景下进行竞争,例如,选择哪个项目?这,这个申请或那,那个应用-它们在更大范围内是互补的。每一个用例都适合不一样的用例。这一决定与其说是一项决定,不如说是一个适合这项工做的工具的问题。数据库

NoSQL与SQL

SQL和NoSQL之间的根本区别并无那么复杂。对于如何存储和检索数据,每种方法都有不一样的理念。apache

对于SQL数据库,全部数据都有一个固有的结构。常规数据库(如MicrosoftSQLServer、MySQL或Oracle数据库)使用图式-关于如何将数据插入数据库的正式定义。例如,表中的给定列可能仅限于整数。所以,列中记录的数据将具备高度正常化。SQL数据库的严格模式还能够相对容易地对数据执行聚合,例如经过联接。编程

使用NoSQL,数据能够无模式或自由格式的方式存储。任何数据均可以存储在任何记录中。在NoSQL数据库中,您将发现用于存储数据的四种通用模型,这将致使四种常见类型的NoSQL系统:设计模式

学习Java从开始概念到高级设计模式在这个全面的12部分的课程! ]——【英文教程应该须要Money避坑】api

  1. 文档数据库(例如CouchDB、MongoDB)。插入的数据以自由格式的JSON结构或“文档”的形式存储,其中的数据能够是从整数到字符串到自由格式文本的任何内容。没有必要指定文档将包含哪些字段(若是有的话)。
  2. 键值存储(例如Redis,Riak)。从简单的整数或字符串到复杂的JSON文档,自由形式的值经过键在数据库中被访问。
  3. 宽栏存储(例如HBASE、Cassandra)。数据存储在列中,而不是传统的SQL系统中的行中。对于查询或数据视图,能够根据须要对任意数量的列(以及许多不一样类型的数据)进行分组或聚合。
  4. 图形数据库(例如Neo4j)。数据表示为实体及其关系的网络或图,图中的每一个节点都是自由造成的数据块。

模式-无模式数据存储在如下场景中很是有用:安全

  1. 您但愿快速访问数据,您更关心的是访问的速度和简单性,而不是可靠的事务或一致性。
  2. 您正在存储大量数据,您不但愿将本身锁在模式中,由于稍后更改模式可能会很慢,并且会很痛苦。
  3. 您正在从一个或多个产生非结构化数据的源中获取数据,您但愿将数据保持在原始形式,以得到最大的灵活性。
  4. 您但愿将数据存储在层次结构中,但但愿由数据自己来描述这些层次结构,而不是外部架构。NoSQL容许数据以更复杂的方式随意地自我引用,以供SQL数据库模拟。

查询NoSQL数据库

传统数据库使用的结构化查询语言在存储和检索数据时提供了一种与服务器通讯的统一方式。SQL语法是高度标准化的,所以单个数据库可能处理某些操做的方式不一样(例如,窗口函数),基本状况保持不变。

相反,每一个NoSQL数据库都有本身的查询和管理数据的语法。例如,CouchDB使用JSON形式的请求,经过HTTP发送到创造检索文件从它的数据库。MongoDB经过命令行接口或语言库经过二进制协议发送JSON对象。

一些NoSQL产品能,会,能够使用相似SQL的语法处理数据,但只能在必定程度上使用.例如,ApacheCassandra,一个列存储数据库,有它本身的相似SQL的语言,Cassandra查询语言或CQL。有些CQL语法是直接脱离SQL剧本的,好比SELECT或INSERT关键字。可是没法在Cassandra中执行联接或子查询,所以CQL中不存在相关的关键字。

无共享架构

NoSQL系统常见的设计选择是“无共享”体系结构。在无共享的设计中,集群中的每一个服务器节点独立于其余节点运行。系统没必要从每一个节点得到一致意见才能将一段数据返回给客户端。查询速度很快,由于能够从最接近或最方便的节点返回查询。

共享的另外一个优势-没有什么是弹性和扩展-的优势。扩展集群就像在集群中旋转新节点并等待它们与其余节点同步同样容易。若是NoSQL节点出现故障,集群中的其余服务器将继续运行。全部数据仍然可用,即便可用的节点更少。

注意,没有共享的设计不是。排他性到NoSQL数据库。许多传统的SQL系统能够不以共享的方式设置,尽管这一般须要牺牲整个集群的一致性来提升性能。

NoSQL限制

若是NoSQL提供了如此多的自由和灵活性,为何不彻底放弃SQL呢?简单的答案是:许多应用程序仍然须要SQL数据库提供的各类约束、一致性和保护。在这些状况下,NoSQL的一些“优势”可能会变成缺点。其余限制来自于NoSQL系统相对较新的事实。

无模式

即便您接受的是自由格式的数据,您也几乎老是须要对其施加约束才能使其有用。对于NoSQL,施加约束涉及将责任从数据库转移到应用程序开发人员。例如,开发人员能够经过对象关系映射系统(ORM)强加结构。可是若是你想让模式活下来数据自己,NoSQL一般不会这样作。

一些NoSQL解决方案为数据提供了可选的数据类型和验证机制。例如,apache Cassandra本机数据类型这让人想起了在常规SQL中发现的那些。

最终一致性

为了得到更好的可用性和性能,NoSQL系统交换强大的或当即的一致性。常规数据库确保操做是原子(事务的全部部分都成功,不然没有成功),一致(全部用户都有相同的数据视图),孤立(交易不竞争),以及耐久(一旦完成,它们将在服务器故障中幸存下来)。

这四个属性统称为ACID,在大多数NoSQL系统中处理方式不一样。而不是整个集群的直接一致性,而是最终一致性,由于要将更新复制到集群中的其余节点所需的时间。插入到集群中的数据最终在任何地方都是可用的,可是您不能保证何时。

事务语义,它在SQL系统中保证事务中的全部步骤(例如,执行销售)。减小库存)已经完成或回滚,一般在NoSQL中是不可用的。对于任何须要“单一真相来源”(如银行)的系统,NoSQL方法都不能很好地工做。你不但愿你的银行余额因你去哪台自动取款机而不一样;你但愿它在任何地方都是同样的。

一些NoSQL数据库有部分机制来解决这个问题。例如,MongoDB为单个操做提供了一致性保证,但对于整个数据库却没有提供一致性保证。Microsoft Azure CosmosDB容许您选择每一个请求的一致性级别,所以您能够选择适合您的用例的行为。可是对于NoSQL,指望最终的一致性做为默认行为。

Nosql锁定

大多数NoSQL系统是概念上类似,但落实彻底不一样。对于数据的查询和管理方式,每一个人都有本身的隐喻和机制。

这的一个反作用是应用程序逻辑和数据库之间潜在的高度耦合。若是您选择一个NoSQL系统并坚持使用它,这并非那么糟糕,可是若是您在路上更改系统,它可能会成为一个绊脚石。

若是您从MongoDB迁移到CouchDB(反之亦然),您必须作的不只仅是迁移数据。您还必须了解数据访问和编程隐喻的不一样之处-换句话说,您必须重写访问数据库的应用程序的各个部分。

NoSQL技巧

NoSQL的另外一个缺点是相对缺少专业知识。在传统SQL人才市场仍然至关庞大的地方,NoSQL技能的市场才刚刚起步。

做为参考,Indeed.com报告说,截至2017年年末,常规SQL数据库的职务列表数量-MySQL、Microsoft SQL Server、Oracle数据库等-在过去三年中仍然高于MongoDB、Couchbase和Cassandra的工做数量。对NoSQL专业知识的需求正在增加,但它仍然是传统SQL市场的一小部分。

合并SQL和NoSQL

咱们能够预期SQL和NoSQL系统之间的一些差别会随着时间的推移而消失。如今已有许多SQL数据库接受JSON文档做为本机数据类型,而且能够对该数据执行查询。有些甚至有对JSON数据施加约束的本机方式,以便与传统的行和列数据同样严格地处理JSON数据。

另外一方面,NoSQL数据库不只添加了相似SQL的查询语言,还添加了传统SQL数据库的其余功能。例如,至少有两个文档数据库-MarkLogic和RavenDB-承诺遵照ACID标准。

有迹象代表,将来几代数据库将跨越范例,并提供NoSQL和SQL功能。微软的Azure宇宙数据库例如,在引擎盖下使用一组原语来交替地再现这两种系统的行为。谷歌云扳手是一个SQL数据库,它将强大的一致性与NoSQL系统的水平可伸缩性结合起来。

不过,纯SQL和纯NoSQL系统将在将来许多年中占据一席之地。查看NoSQL以得到对自由格式数据的快速、高度可伸缩的访问。这须要付出一些代价,好比读取的一致性和SQL数据库经常使用的其余安全措施。可是对于许多应用程序来讲,这些安全措施极可能值得用NoSQL提供的东西来交换。

原文译自:https://www.infoworld.com/article/3240644/nosql/what-is-nosql-nosql-databases-explained.html