下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

NoSQL 数据库你应该了解的内容

作者:课课家教育     来源: http://www.kokojia.com点击数:644发布时间: 2017-08-14 09:00:30

标签: 数据库数据库基础NoSQL

  四分之一个世纪以来,关系型数据库(RDBMS)一直是主流数据库模型。但是现在非关系型数据库,“云”或者“NoSQL”数据库,正在作为一种替代数据库模型获得越来越多的占有率。本文中我们将关注非关系型NoSQL数据库的10个关键特征:排在前5位的优点和前5位的挑战。

  不过,再讲排在前5位的优点和前5位的挑战之前,我们必须先来看一下NoSQL数据库的一些内容,这个跟后面的内容息息相关!

NoSQL

  什么是NoSQL?

  大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“NotOnlySQL”的缩写。它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。

  为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。

  为了更好地了解本书所介绍的NoSQL数据库,对关系型数据库的理解是必不可少的。那么,就让我们先来看一看关系型数据库的历史、分类和特征吧。

  关系型数据库简史

  1969年,埃德加•弗兰克•科德(EdgarFrankCodd)发表了划时代的论文,首次提出了关系数据模型的概念。但可惜的是,刊登论文的《IBMResearchReport》只是IBM公司的内部刊物,因此论文反响平平。1970年,他再次在刊物《CommunicationoftheACM》上发表了题为“ARelationalModelofDataforLargeSharedDatabanks”(大型共享数据库的关系模型)的论文,终于引起了大家的关注。

  科德所提出的关系数据模型的概念成为了现今关系型数据库的基础。当时的关系型数据库由于硬件性能低劣、处理速度过慢而迟迟没有得到实际应用。但之后随着硬件性能的提升,加之使用简单、性能优越等优点,关系型数据库得到了广泛的应用。

  通用性及高性能

  虽然本书是讲解NoSQL数据库的,但有一个重要的大前提,请大家一定不要误解。这个大前提就是“关系型数据库的性能绝对不低,它具有非常好的通用性和非常高的性能”。毫无疑问,对于绝大多数的应用来说它都是最有效的解决方案。

  突出的优势

  关系型数据库作为应用广泛的通用型数据库,它的突出优势主要有以下几点:

  ①保持数据的一致性(事务处理)

  ②由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)

  ③可以进行JOIN等复杂查询

  ④存在很多实际成果和专业技术信息(成熟的技术)

  这其中,能够保持数据的一致性是关系型数据库的最大优势。在需要严格保证数据一致性和处理完整性的情况下,用关系型数据库是肯定没有错的。但是有些情况不需要JOIN,对上述关系型数据库的优点也没有什么特别需要,这时似乎也就没有必要拘泥于关系型数据库了。

  关系型数据库的不足

  不擅长的处理

  就像之前提到的那样,关系型数据库的性能非常高。但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途。具体来说它并不擅长以下处理:

  ①大量数据的写入处理

  ②为有数据更新的表做索引或表结构(schema)变更

  ③字段不固定时应用

  ④对简单查询需要快速返回结果的处理

  NoSQL数据库

  为了弥补关系型数据库的不足(特别是最近几年),NoSQL数据库出现了。关系型数据库应用广泛,能进行事务处理和JOIN等复杂处理。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。

  易于数据的分散

  如前所述,关系型数据库并不擅长大量数据的写入处理。原本关系型数据库就是以JOIN为前提的,就是说,各个数据之间存在关联是关系型数据库得名的主要原因。为了进行JOIN处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散。相反,NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。

  提升性能和增大规模

  下面说一点题外话,如果想要使服务器能够轻松地处理更大量的数据,那么只有两个选择:一是提升性能,二是增大规模。下面我们来整理一下这两者的不同。

  首先,提升性能指的就是通过提升现行服务器自身的性能来提高处理能力。这是非常简单的方法,程序方面也不需要进行变更,但需要一些费用。若要购买性能翻倍的服务器,需要花费的资金往往不只是原来的2倍,可能需要多达5到10倍。这种方法虽然简单,但是成本较高。

  另一方面,增大规模指的是使用多台廉价的服务器来提高处理能力。它需要对程序进行变更,但由于使用廉价的服务器,可以控制成本。另外,以后只要依葫芦画瓢增加廉价服务器的数量就可以了。

  不对大量数据进行处理的话就没有使用的必要吗?

  NoSQL数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的。但如果不是对大量数据进行操作的话,NoSQL数据库的应用就没有意义吗?

  答案是否定的。的确,它在处理大量数据方面很有优势。但实际上NoSQL数据库还有各种各样的特点,如果能够恰当地利用这些特点将会是非常有帮助。具体的例子将会在第2章和第3章进行介绍,这些用途将会让你感受到利用NoSQL的好处。

  ①希望顺畅地对数据进行缓存(Cache)处理

  ②希望对数组类型的数据进行高速处理

  ③希望进行全部保存

  多样的NoSQL数据库

  NoSQL数据库存在着“key-value存储”、“文档型数据库”、“列存储数据库”等各种各样的种类,每种数据库又包含各自的特点。下一节让我们一起来了解一下NoSQL数据库的种类和特点。

  NoSQL数据库是什么

  NoSQL说起来简单,但实际上到底有多少种呢?我在提笔的时候,到NoSQL的官方网站上确认了一下,竟然已经有122种了。另外官方网站上也介绍了本书没有涉及到的图形数据库和对象数据库等各个类别。不知不觉间,原来已经出现了这么多的NoSQL数据库啊。

  这里小编将为大家介绍具有代表性的NoSQL数据库。

  key-value存储

  这是最常见的NoSQL数据库,它的数据是以key-value的形式存储的。虽然它的处理速度非常快,但是基本上只能通过key的完全一致查询获取数据。根据数据的保存方式可以分为临时性、永久性和两者兼具三种。

  临时性

  memcached属于这种类型。所谓临时性就是“数据有可能丢失”的意思。memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止的时候,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据(旧数据会丢失)。

  ①在内存中保存数据

  ②可以进行非常快速的保存和读取处理

  ③数据有可能丢失

  永久性

  TokyoTyrant、Flare、ROMA等属于这种类型。和临时性相反,所谓永久性就是“数据不会丢失”的意思。这里的key-value存储不像memcached那样在内存中保存数据,而是把数据保存在硬盘上。与memcached在内存中处理数据比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的。但数据不会丢失是它最大的优势。

  ①在硬盘上保存数据

  ②可以进行非常快速的保存和读取处理(但无法与memcached相比)

  ③数据不会丢失

  两者兼具

  Redis属于这种类型。Redis有些特殊,临时性和永久性兼具,且集合了临时性key-value存储和永久性key-value存储的优点。Redis首先把数据保存到内存中,在满足特定条件(默认是15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的key发生变更)的时候将数据写入到硬盘中。这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性。这种类型的数据库特别适合于处理数组类型的数据。

  ①同时在内存和硬盘上保存数据

  ②可以进行非常快速的保存和读取处理

  ③保存在硬盘上的数据不会消失(可以恢复)

  ④适合于处理数组类型的数据

  面向文档的数据库

  MongoDB、CouchDB属于这种类型。它们属于NoSQL数据库,但与key-value存储相异。

  不定义表结构

  面向文档的数据库具有以下特征:即使不定义表结构,也可以像定义了表结构一样使用。关系型数据库在变更表结构时比较费事,而且为了保持一致性还需修改程序。然而NoSQL数据库则可省去这些麻烦(通常程序都是正确的),确实是方便快捷。

  可以使用复杂的查询条件

  跟key-value存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据。虽然不具备事务处理和JOIN这些关系型数据库所具有的处理能力,但除此以外的其他处理基本上都能实现。这是非常容易使用的NoSQL数据库。

  ①定义表结构

  ②可以利用复杂的查询条件

  面向列的数据库

  Cassandra、Hbase、HyperTable属于这种类型。由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引人注目。

  面向行的数据库和面向列的数据库

  普通的关系型数据库都是以行为单位来存储数据的,擅长进行以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被称为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

  高扩展性

  面向列的数据库具有高扩展性,即使数据增加也不会降低相应的处理速度(特别是写入速度),所以它主要应用于需要处理大量数据的情况。另外,利用面向列的数据库的优势,把它作为批处理程序的存储器来对大量数据进行更新也是非常有用的。但由于面向列的数据库跟现行数据库存储的思维方式有很大不同,应用起来十分困难。

  ①高扩展性(特别是写入处理)

  ②应用十分困难

  讲完了以上内容,下面我们接着讲:非关系型NoSQL数据库的10个关键特征:排在前5位的优点和前5位的挑战。

  NoSQL的五大有点

  1:弹性扩展

  多年来,数据库负载需要增加时,数据管理员只能依赖于纵向扩展(scale-up)--买更多更强的服务器,而不是依赖横向扩展(scale-out)--将数据库分布在多台主机上。无论如何,随着交易频率、可用性要求的提高,和数据库向云上和虚拟环境中迁移的需求的提出,基于商业硬件的横向扩展所带来的经济效益已经变得无法拒绝。

  相对于RDBMS系统不能轻松的在商业集群上进行横向扩展,新生的NoSQL数据设计上就是要能够透明的利用新节点进行扩展。NoSQL数据库的设计通常要考虑利用低成本的商业硬件。

  2:大数据

  就像过去二十年中交易率的提高已经超出了人们的想象,被存储的数据的规模也极大的增加了。O'Reilly聪明的称这种现象为“数据的工业革命”。RDBMS系统的能力也在提高去适应这种增长,但就像交易率上的限制一样,单个RDBMS系统实际能管理的数据规模已经无法满足一些企业的需求。今天,NoSQL系统,例如Hadoop,已经能过处理“大数据”级别的数据容量;而这种数据容量远超过最大的RDBMS系统的处理能力。

  3.告别DBA(再见?)

  尽管这些年RDBMS供应商声称有很多易管理性上的提高措施,高级RDBMS系统上的维护还是离不开训练有素但昂贵的DBA们。DBA需要紧密的参与高级RDBMS系统的设计、安装和持续的调优。

  理论上讲,NoSQL数据库通常从最基本的设计就要求更少的管理:自动化修复和数据分布、更简单的数据模型带来更少的管理操作和调优需求。实际上,DBA已死的说法多少有点夸张。总要有人为关键业务数据存储的性能和可用性负责。

  4:经济性

  NoSQL数据库通常使用廉价服务器集群去管理迅猛发展的数据和交易容量,而RDBMS倾向依赖昂贵的专业服务器和存储系统。结果就是,NoSQL系统的每千兆字节成本或者每秒的交易成本要很多倍的低于RDBMS系统,这使得你可以非常低的成本去存储和处理更多的数据。

  5:灵活的数据模型

  变更管理对于大型RDBMS产品是很头疼的。在RDBMS中,即使是微小的数据模型变更也需要非常小心的处理,而且可能要求系统停机或者降低服务级别。

  NoSQL数据库的数据模型限制则轻松的多—或者根本就没有。NoSQL的键值存储和文档数据库允许应用在一个数据元素中存储任何结构的数据。即使是相对严格的基于BigTable的NoSQL数据库(Cassandra,HBase)通常也允许没有太多限制的创建新列。

  结果就是,应用或者数据库模式的改变不需要作为一个复杂的变更单元进行管理。理论上讲,这允许应用可以更快的迭代,当然,很清楚的一点是,如果应用不能保证数据的完整性这可能带来不良的副作用

  NoSQL5大挑战

  NoSQL数据库的前景很被看好,但是要应用到主流的企业还有许多困难需要克服。这里是几个首先要解决的问题。

  1:完备

  RDBMS系统已经存在很长时间了。而NoSQL的拥护者认为存在时间的增长就是它退化的信号。但是对大多数CIO来说RDBMS是稳定的。多数情况下,RDBMS系统是稳定且多功能的。相比较而言,大多数NoSQL产品的一些关键组件还有待实现。

  大多数的开发者都渴望生活在科技的前沿,但是企业却必须小心谨慎。

  2:支持

  企业要保证,如果一个关键系统崩溃,他们能够得到及时的有支持。所有RDBM提供商都付出很大的力量用以朝代高水平的企业支持。

  相比之下,大部分NoSQL系统都是开源项目,尽管每一个NoSQL数据库通常都有一家或多家公司提供支持,但这些公司通常是小公司,缺少全球影响力,支持资源和像Oracle,Microsoft,或者IBM一样的信誉。

  3:数据分析和商业智能

  为了满足流行的Web2.0应用对可扩展的要求,NoSQL数据库应运而生。因而,它们的功能集都是顷向于为这些应用服务。但是在Web应用增删改查的业务中产生的数据具有商业价值。从这些数据库中挖掘潜在的商业信息提高企业的效率和竞争力以及商业智能(BI)对所有企业来讲都是IT所面昨的关键的问题。

  NoSQL数据库缺少即席查询和数据分析工具。即便一个简单的查询都需要专业的编程技能,并且传统的BI工具不提供对NoSQL的连接。

  HIVE和PIG是为解决这个问题而出现的,他们提供了更方便的数据访问方式,可以访问存储在Hadoop集群上的数据甚至其他NoSQL数据库。QuestSoftware已经开发了一个云数据库产品—Toad—可以为多种NoSQL提供即席查询能力。

  4:管理

  NoSQL的设计目标可能是零管理方案,对现实离这一目标太远。目前NoSQL的安装和维护都需要掌握技术。

  5.专业性

  熟悉关系数据库概念和编程的开发者遍布全球各领域,但是几乎每一个非关系数据库的开发者都仍然处在学习当中。随着时间推移,这种情况当然会被解决,但是就现在而言,找一个关系数据库的开发人员或者是管理人员,显然更加容易。

  小编结语:

  NoSQL并不是No-SQL,而是指NotOnlySQL。它的出现是为了弥补SQL数据库因为事务等机制带来的对海量数据、高并发请求的处理的性能上的欠缺。

  NoSQL不是为了替代SQL而出现的,它是一种替补方案,而不是解决方案的首选。绝大多数的NoSQL产品都是基于大内存和高性能随机读写的(比如具有更高性能的固态硬盘阵列),一般的小型企业在选择NoSQL时一定要慎重!不要为了NoSQL而NoSQL,可能会导致花了冤枉钱又耽搁了项目进程。

  NoSQL数据库正在成为数据库领域中越来越重要的组成部分,如果得到正确的使用,它将会带来真正的益处。然而,对于企业来说,使用NoSQL数据库的时候应当时刻注意相关法律问题。

赞(13)
踩(0)
分享到:
上一篇:程序员那些事
华为认证网络工程师 HCIE直播课视频教程