什么是NoSQL——【解释NoSQL数据库】
什么是NoSQL?解释NoSQL数据库
SQL数据库对数据类型和⼀致性有限制。Nosql为了速度、灵活性和规模,抛弃了它们。
开发应⽤程序时最基本的选择之⼀是使⽤SQL或NoSQL数据库存储数据。传统的SQL数据库(即关系数据库)是⼏⼗年技术进步、良好实践和现实世界压⼒测试的产物。它们是为可靠的事务和临时查询⽽设计的,这是业务应⽤程序的⽀柱。但它们也背负着⼀些限制-⽐如僵化的模式-使得它们不太适合其他类型的应⽤程序。
NoSQL数据库是针对这些限制⽽出现的。NoSQL系统存储和管理数据的⽅式允许开发⼈员以较⾼的操作速度和极⼤的灵活性。许多是由⾕歌、亚马逊、雅虎和Facebook等公司开发的,它们寻求更好的⽅法来存储内容或为⼤型⽹站处理数据。与SQL数据库不同,许多NoSQL 数据库可以在数百或数千台服务器上⽔平缩放。
[您应该使⽤哪个NoSQL数据库?让InfoWorld做你的向导。NoSQL怨恨匹配:. · . · .\x{e76f}跟上InfoWorld编程中最热门的主题. ]
不过,NoSQL的优点并不是没有代价的。NoSQL系统通常不提供与SQL数据库相同的数据⼀致性级别。实际上,虽然SQL数据库传统上牺牲了性能和可伸缩性,但是在可靠事务的背后,NoSQL数据库在很⼤程度上放弃了对速度和可伸缩性的严格保证。
简⽽⾔之,SQL和NoSQL数据库提供了不同的权衡。虽然他们可以在特定项⽬的背景下进⾏竞争,例如,选择哪⼀个项⽬?这,这个申请或那,那个应⽤-它们在更⼤范围内是互补的。每个⽤例都适合不
同的⽤例。这⼀决定与其说是⼀项决定,不如说是⼀个适合这项⼯作的⼯具的问题。
NoSQL与SQL
SQL和NoSQL之间的根本区别并没有那么复杂。对于如何存储和检索数据,每种⽅法都有不同的理念。
对于SQL数据库,所有数据都有⼀个固有的结构。常规数据库(如MicrosoftSQLServer、MySQL或Oracle数据库)使⽤图式-关于如何将数据插⼊数据库的正式定义。例如,表中的给定列可能仅限于整数。因此,列中记录的数据将具有⾼度正常化。SQL数据库的严格模式还可以相对容易地对数据执⾏聚合,例如通过联接。
使⽤NoSQL,数据可以⽆模式或⾃由格式的⽅式存储。任何数据都可以存储在任何记录中。在NoSQL数据库中,您将发现⽤于存储数据的四种通⽤模型,这将导致四种常见类型的NoSQL系统:
[ ]——【英⽂教程应该需要Money避坑】
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的语⾔,。有些CQL语法是直接脱离SQL剧本的,⽐如SELECT或INSERT关键字。但是⽆法在Cassandra中执⾏联接或⼦查询,因此CQL中不存在相关的关键字。
⽆共享架构
NoSQL系统常见的设计选择是“⽆共享”体系结构。在⽆共享的设计中,集中的每个服务器节点独⽴于其他节点运⾏。系统不必从每个节点获得⼀致意见才能将⼀段数据返回给客户端。查询速度很快,因为可以从最接近或最⽅便的节点返回查询。
共享的另⼀个优点-没有什么是弹性和扩展-的优点。扩展集就像在集中旋转新节点并等待它们与其他节点同步⼀样容易。如果NoSQL节点出现故障,集中的其他服务器将继续运⾏。所有数据仍然可⽤,即使可⽤的节点更少。
注意,没有共享的设计不是。排他性到NoSQL数据库。许多传统的SQL系统可以不以共享的⽅式设置,尽管这通常需要牺牲整个集的⼀致性来提⾼性能。
NoSQL限制
如果NoSQL提供了如此多的⾃由和灵活性,为什么不完全放弃SQL呢?简单的答案是:许多应⽤程序仍然需要SQL数据库提供的各种约束、⼀致性和保护。在这些情况下,NoSQL的⼀些“优点”可能会变成缺点。其他限制来⾃于NoSQL系统相对较新的事实。
⽆模式
即使您接受的是⾃由格式的数据,您也⼏乎总是需要对其施加约束才能使其有⽤。对于NoSQL,施加
约束涉及将责任从数据库转移到应⽤程序开发⼈员。例如,开发⼈员可以通过对象关系映射系统(ORM)强加结构。但是如果你想让模式活下来数据本⾝,NoSQL通常不会这样做。
⼀些NoSQL解决⽅案为数据提供了可选的数据类型和验证机制。例如,apache Cassandra这让⼈想起了在常规SQL中发现的那些。
redis是nosql数据库吗最终⼀致性
为了获得更好的可⽤性和性能,NoSQL系统交换强⼤的或⽴即的⼀致性。常规数据库确保操作是原⼦(事务的所有部分都成功,否则没有成功),⼀致(所有⽤户都有相同的数据视图),孤⽴(交易不竞争),以及耐久(⼀旦完成,它们将在服务器故障中幸存下来)。
这四个属性统称为ACID,在⼤多数NoSQL系统中处理⽅式不同。⽽不是整个集的直接⼀致性,⽽是最终⼀致性,因为要将更新复制到集中的其他节点所需的时间。插⼊到集中的数据最终在任何地⽅都是可⽤的,但是您不能保证什么时候。
事务语义,它在SQL系统中保证事务中的所有步骤(例如,执⾏销售)。和减少库存)已经完成或回滚,通常在NoSQL中是不可⽤的。对于任何需要“单⼀真相来源”(如银⾏)的系统,NoSQL⽅法都不能很好地⼯作。你不希望你的银⾏余额因你去哪台⾃动取款机⽽不同;你希望它在任何地⽅都是⼀样的。
⼀些NoSQL数据库有部分机制来解决这个问题。例如,MongoDB为单个操作提供了⼀致性保证,但对于整个数据库却没有提供⼀致性保证。Microsoft Azure CosmosDB允许您,因此您可以选择适合您的⽤例的⾏为。但是对于NoSQL,期望最终的⼀致性作为默认⾏为。
Nosql锁定
⼤多数NoSQL系统是概念上相似,但落实完全不同。对于数据的查询和管理⽅式,每个⼈都有⾃⼰的隐喻和机制。
这的⼀个副作⽤是应⽤程序逻辑和数据库之间潜在的⾼度耦合。如果您选择⼀个NoSQL系统并坚持使⽤它,这并不是那么糟糕,但是如果您在路上更改系统,它可能会成为⼀个绊脚⽯。
如果您从MongoDB迁移到CouchDB(反之亦然),您必须做的不仅仅是迁移数据。您还必须了解数据访问和编程隐喻的不同之处-换句话说,您必须重写访问数据库的应⽤程序的各个部分。
NoSQL技巧
NoSQL的另⼀个缺点是相对缺乏专业知识。在传统SQL⼈才市场仍然相当庞⼤的地⽅,NoSQL技能的市场才刚刚起步。
作为参考,Indeed报告说,截⾄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功能。微软的例如,在引擎盖下使⽤⼀组原语来交替地再现这两种系统的⾏为。是⼀个SQL数据库,它将强⼤的⼀致性与NoSQL系统的⽔平可伸缩性结合起来。
不过,纯SQL和纯NoSQL系统将在未来许多年中占据⼀席之地。查看NoSQL以获得对⾃由格式数据的快速、⾼度可伸缩的访问。这需要付出⼀些代价,⽐如读取的⼀致性和SQL数据库常⽤的其他安全措施。但是对于许多应⽤程序来说,这些安全措施很可能值得⽤NoSQL提供的东西来交换。
原⽂译⾃:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论