云计算下的新型数据库技术
摘要:在这个信息化的时代,我们的一举一动都离不开与数据打交道,特别是云计算和大数据时代的到来,使得传统数据库的性能已无法满足海量数据的实时交易查询需求,在性能和成本的双重压力之下,云计算下的数据库需要寻找突破之路。
1.简介:
云计算通过整合,管理和调配分布在互联网中的所有计算资源,以统一的界面同时向用户提供服务。互联网提供的各种计算形式的应用以及提供这些服务的数据中心和软硬件基础设施、提供的服务成为软件即服务(SaaS),数据中心的软硬件基础设施即为云,这种虚拟化资源提供计算的方式使得服务通过互联网传播,而用户不需要知道云计算服务的提供者和提供方式。因此,云计算具有规模大,可靠性高,用户透明,可扩展性强,提供按需服务和廉价等特点。而实现以上需求的前提条件就是云计算系统应该具备足够大的规模和处理能力,以满足大量的数据访问,数据存储和来自不同网络等额请求。
传统的关系型数据库虽然在数据存储方面占据着不可动摇的地位,但由于其天生的限制,越来越不能满足云计算下的数据扩展、读写速度、支撑容量以及建设和运营成本的要求。鉴于此,国内外知名的一些互联网企业Google、Facebook、Twitter、阿里、腾讯、百度等纷纷展开探索,自主研发新型数据库,这些企业有拥有众多的优秀人才,以及丰富的产品经验,所以对于新型数据库的探索成果在一定程度上也代表了当下云计算下数据库的最新的进展,所以本文主要先对与传统型数据库的优劣进行一些分析,接着介绍了现如今新型数据库的研究进展,对各类型数据库进行一些对比分析,最后在对于还存在的不足进行总结并对数据库的发展提出自己一些的看法。
2.背景:
2.1 云计算和大数据:
大数据是一种大规模数据的管理和利用的商业模式和技术平台的泛指,它不同于传统的海量数据,除了数据规模呈现几何级数增长的特征以外,还包括所有数据类型的采集、分类、处理、分析和展现等多个方面,从而最终实现从大数据中挖掘潜在巨大价值的目的。因此,大数据具有这4方面的特征:规模性(Volume)、多样性(Variety)、高速性(Velocity)和真实性(Veracity)。
云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。能够像煤气、水电一样提供给信息时代的社会化服务,使用方便,费用低廉。云计算具有以下的特点:
(1) 超大规模。“云”具有超大的规模,Google云计算拥有100多万台服务器,Amazon、IBM、微软等的云均拥有几十万台服务器,正是这样拥有超大规模的“云”能够赋予用户前所未有的计算能力。
(2) 虚拟化。云计算支持用户在任意位置,使用各种终端获取应用服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本或者一部手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算的任务。
(3) 高可靠性。“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算可靠。
(4) 通用性。云计算不针对特定的应用,在云的支撑下可以构造出千变万化的应用,同一个云可以同时支撑不同的应用运行
(5) 高可扩展性。云的规模可以动态伸缩,满足应用和用户规模增长的需要。
(6) 按需服务。云是一个庞大的资源池,可按需购买,象自来水,电,煤气一样计费使用。
(7) 极其廉价。用于“云”的特殊容错措施可以采用极其廉价的节点来构成云,“云”的自动化集中式管理使得大量企业无需负担日益高昂的数据中心管理成本,“云”的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受“云”的低成本优势。
大数据着眼于“数据”,关注实际业务,提供数据采集分析挖掘,看重信息积淀即数据存储能力。云计算着眼于“计算”,关注IT解决方案,提供IT基础架构,看重计算能力,即数据处理能力,数据是两者之间最重要的联系,也是两者存在的意义,所以对于云计算和大数据时代,数据库技术的重要性也就不言而喻了。
2.2 云计算下的传统型数据库
随着web2.0的发展,传统的关系型数据库在应对超大规模和高并发的数据量和访问量时存在难以克服的问题:
(1)高并发读写速度慢
在数据量达到一定规模时,由于关系型数据库的系统逻辑非常复杂,使得其容易发生死锁等并发问题,导致其读写速度下降非常严重。
(2)支撑容量有限
对于数据量巨大的一些网站例如社交网站,每天海量的用户动态,累计下每月就能产生几亿条数据记录,对于关系型数据库,在这样一个具有数亿条记录的表中进行SQL查询,效率会是极其低下乃至不可忍受的。
(3)可扩展性差
在基于web的架构中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,传统的关系型数据库却不能像web service 那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,因此迫切需要关系数据库也能够通过不断添加服务器节点来实现扩展。
(4)建设和运维成本高
企业级数据库的价格很高,并且随着系统的规模增大而不断上升。高昂的建设和运维成本无法满足云计算应用对数据库的需求。
(5)对于分布式系统的制约
为了支撑更大的访问量和数据量,我们必然需要分布式数据库系统,然而由于传统关系型数据库的强一致性,就会使得分布式系统的延迟提高,因为网络通信本身比单机内通信代价高很多,这种通信的代价就会直接增加系统单次提交的延迟。延迟提高会导致数据库所持有时间变长,使得高冲突条件下分布式事物的性能不升反降,甚至性能距离单机数据库都还有明显的差距。面对这个难题,传统的关系数据库选择了放弃分布式的方案,因为在20世纪70-80年代,数据库主要被用来处理企业内的各类数据,面对的用户不过几千人,而数据量最多也就是TB级别。用单台机器处理事务,用个磁盘阵列处理一下磁盘容量不够的问题,基本就能解决一切问题。
然而,在大数据时代,云计算的数据量已然从TB级别变为了PB级别甚至更多,存在单点的单击系统无论如何努力,都会面对系统处理能力的天花板,原来的这条路就不能再接着走下去了。
2.3 几种云计算下的新型数据库及其实现原理
(1)NoSQL非关系型数据库
面对传统数据库出现的种种挑战,NoSQL是在新形势下出现的一种给关系型数据库的总称,它用全新的存储方式,减少了数据交互,减少了编写、调试的代码,对海量数据实现高效存储和高效访问,同时它的开源免费也降低了企业的运营成本。
NoSQL的主要特征为:
1)不需要预定义模式:不需要预定义数据模式,预定义表结构。数据中的每条记录可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
2)无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
3)弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
4)分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
5)异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
6)BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。
具体优势表现有:
1)数据库的开发效率高,在设计上NoSQL数据库和传统的数据库有很大的不同,传统应用程序的开发中,需要在内存数据结构和福安息数据库的映射上花费大量的精力和时间。NoSQL数据库更符合应用程序的需求,部分NoSQL数据库可以在硬盘上直接操作,简化了数据的交互,减少了编写、调试程序的工作量。
2)数据库的扩展能力强。现在企业通常使用更小,更便宜的计算机组成集群来构建数据库,NoSQL数据库的设计正是针对服务器集群,所以更适合大规模数据的处理。
3)数据库的开发成本低廉。因为NoSQL数据库主要都是开源软件,所以没有昂贵的开发成本。在项目开发中很多企业为了节省开发成本而选择NoSQL数据库。
4)数据模型灵活。在关系数据库中,数据有固定结构,通过各种操作互相关联,对大型的表格增删字段非常麻烦。NoSQL的存储只有一对键值或者数组,无需事先建立字段,任何时候都可以存储自定义的数据格式。
NoSQL数据库的分类:
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。[3] 举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存储数据库。
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Grap
(2)NewSQL
NewSQL是对各种新的可扩展/高性能数据库的总称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还有传统数据库支持ACID和SQL等特性。
NewSQL系统虽然在的内部结构变化很大,但是它们有两个显着的共同特点:
(1)它们都支持关系数据模型;
(2) 它们都使用SQL作为其主要的接口。已知的第一个NewSQL系统叫做H-Store,它是一个分布式并行内存数据库系统。
目前NewSQL系统大致分三类:
新架构
第一类型的NewSQL系统是全新的数据库平台,它们均采取了不同的设计方法。它们大概分两类:
(1) 这类数据库工作在一个分布式集群的节点上,其中每个节点拥有一个数据子集。 SQL查询被分成查询片段发送给自己所在的数据的节点上执行。这些数据库可以通过添加额外的节点来线性扩展。现有的这类数据库有: Google Spanner, VoltDB, Clustrix, NuoDB.
(2) 这些数据库系统通常有一个单一的主节点的数据源。它们有一组节点用来做事务处理,这些节点接到特定的SQL查询后,会把它所需的所有数据从主节点上取回来后执行SQL查询,再返回结果。
SQL引擎
第二类是高度优化的SQL存储引擎。这些系统提供了MySQL相同的编程接口,但扩展性比内置的引擎InnoDB更好。这类数据库系统有:TokuDB, MemSQL。
透明分片
这类系统提供了分片的中间件层,数据库自动分割在多个节点运行。这类数据库包扩:ScaleBase,dbShards, Scalearc。
2.4 当今几家主流互联网公司的数据库技术
(1)阿里分布式数据库服务DRDS
DRDS也是一个NewSQL的系统,它与ScaleBase、VoltDB等系统类似,都希望能够找到一条既能保持系统的高扩展性和高性能,又能尽可能保持传统数据库的ACID事务和SQL特性的分布式数据库系统。
三层架构,Matrix对应数据库切分场景,