赵卫
摘要:近年来,随着Web2.0的兴起,数据呈爆发式的增长NoSQL数据库凭借其易扩展、高性能、高可用、数据模型灵活等特点得到了业界的认可和快速的发展。该文分析了NoSQL技术的独特之处及其显著优势,研究各类NoSQL技术并进行了比较,最后对研究前景进行展望。
关键词:大数据;NoSQL;数据模型
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)19-0011-03
传统的关系数据库有着稳定的性能和强大的功能,久经考验且使用简单,同时关系型数据库也积累了大量的成功案例。在互联网的发展时期,是曾经的领导者,它为互联网的发展做出了卓越的贡献。然而近几年,随着动态交互网站Web2.0的迅速兴起,访问量不断上升,传统的关系数据库对此显得力不从心,尤其是在大数据量高并发的情况下,暴露了很多难以克服的问题。而非关系型的数据库NoSQL有着非常高的读写性能,能够解决海量数据集合下,对多重数据种类进行快速存储和读取的难题。
1 大数据对数据库存储技术的要求
大数据时代,随着云服务等应用的快速普及,对数据中心提出了革命性的需求,数据的存储架构已经成为网络服务的核心要素。另外,互联网“+”等一系列应用的推进和发展,使各种各样的数据成为炙手可热的资产、资源。存储系统作为数据的载体,将成为大数据基础架构中最为关键的核心组成之一。
基于互联网大数据的应用需求,提出了“应用定义存储”这一概念。作为核心数据基础的存储系统,不再仅仅是分散的、单一的底层设备。它除了要具备高可靠性和安全性等优异的性能之外,还要求具备并行分布、虚拟化、良好的扩展性以及异构资源整合等多方面的特点,这样才能满足具备大数据特征的业务应用需求。海量数据需要对对数据进行高速的读取和存储,同时爆发增长的数据对存储设备的容量提出更高的要求,我们需要充分考虑存储系统的数据的功能集成度、安全性、稳定性以及系统的易扩展性等各方面的因素。
2 NoSQL数据库
2.1 NoSQL数据库的特点
1)易扩展性
NoSQL数据库虽然种类繁多,但是它们共同的特点就是数据之间无关。这就使得数据库扩展性获得突破性进展,完全区别与传统的关系型数据库。同时在架构的层面上,硬件设备可扩展的能力也得到极大的增强。
2)大数据量,高性能
NoSQL数据库都具有非常高的并发读写性能,这一点在海量数据的处理上表现的尤其明显。这一特点得益于NoSQL数据库的无关系性,它的结构简单。我们知道,关系型数据库使用 Query Cache,每更新一次表Cache就会失效,在web2.0时代,短时间内会有大量数据交互频繁的应用,这样一来,Cache性能和效率就不高。而NoSQL的 Cache是记录级的,是一种细粒度的Cache,所以相比较关系型数据库而言性能就要高的多了。
3)灵活的数据模型
NoSQL不需要事先为存储数据建立相应的字段,用户可以随时存储自定义的各种数据格式。在关系数据库里,要给数据表里增加或者删除字段是非常麻烦的,尤其是在大数据量的表里,增加和删除某一字段简直就是一个噩梦。
4)高可用
NoSQL在不太影响性能的情况下,就可以方便地实现高可用的架构。比如Cassandra,HBase模型,我们甚至可以通过复制模型来实现NoSQL的高可用。
2.2 NoSQL数据库分类
1)键值(Key-Value)存储数据库
键值存储型数据库会用到Hash表,在每一个Hash表中,有一个特定的键和一个指针会指向特定的数据。对于应用系统来说键值模型的优势是简单、容易部署。但是假如数据库管理员只需要对其中一部分值进行查询或更新操作的时候,键值存储数据库就显得效率低下了。举例如:Redis, Voldemort, .
2)列存储数据库
为了应对分布式存储的海量数据,通常会用到列存储数据库。虽然在数据库中仍然存在键,但不同的是它们是指向多个列,而这些列则是由列家族来安排的。举例如:Cassandra, HBase, Riak。
3)文档型数据库
文档型数据数据库最大的特点在于数据模型是文档,它们以特定的格式存储在数据库中,比如JSON。与键值数据库相比较而言,文档型数据库的查询效率更高一些,它被认为是键值存储数据库的升级版,允许数据库之间嵌套键值。举例如:CouchDB, MongoDB。
4)图形(Graph)数据库
图形数据库同关系型数据库最大的不同就在于,它使用了灵活多变的图形模型,并且能够将该模型扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询时需要制定相应的数据模型,这就使得数据库的可扩展性受到一定的限制。图1给出了目前正在使用的主要NoSQL数据库类型及其各自的占比。
3 与传统数据库的比较
3.1 NoSQL与关系型数据库的比较
与传统的关系型数据库相比,它们之间最主要的差异就是数据存储的方式不同。SQL存储一些格式化的数据结构,数据是表格式的,数据表之间可以彼此关联相互协作存储。这样的结构使得对数据的提取操作相对方便很多,这也是关系型数据库无法突破的一个性能瓶颈。
NoSQL数据库是大块组合在一起的非结构化数据,因此不适合存储在固定的数据表中,数据大多是以键值对存储,由于它不局限于固定的结构,因此可以减少一些时间和空间的开销,从而符合大数据环境下对海量数据的快速提取和存储的要求。表1比较了SQL和典型的NoSQL数据库MongoDB之间的差异。
随着数据的海量增长,数据库需要随着扩展。SQL数据库是纵向扩展的,要提高数据库的处理能力,就需要使用速度更快的硬件,因而最终会达到扩展的上限。NoSQL数据库采用横向扩展,分布式存储数据,因此可以通过增加更多的节点来分担负载,这使得数据库的扩展成本降低,并且能够快速有效的实现扩展。
SQL数据库提供可靠地存储和处理数据,但是对海量数据的高并发提取和写入能力显然不够,而NoSQL最大的优势是在应对大数据方面,它用无模式方式做数据管理,所以其横向扩展潜力是不受限的。
3.2 NoSQL技术特点
1)索引支持
关系型数据库在设计最初主要考虑的是如何使得用户的工作更加简单,设计者们没有预料到今天的互联网应用竟然会对可扩展性提出如此高的要求。不可否认,SQL语言的产生促进了数据库接口标准化的形成,从而产生了Oracle这样的数据库公司的,它的发展也同时带动了互联网相关产业链的发展。传统的关系型数据库由于其在单机存储引擎上支持索引,因而大大降低了系统的可扩展性。而NoSQL系统由于是在系统层面提供对索引的支持,这就使得单机存储引擎更为简单和纯粹,从而击碎系统可扩展的瓶颈。
2)并发事物处理
关系型数据库有一套规范的关于事务并发处理的理论,比如说锁的粒度,事务的隔离级别,回滚,死锁等等。我们发现,互联网中的大多数应用,都是读取多而写入少,并且大部分事务需求都是简单的。因此,一般采用copy-on-write技术,即:单线程写,多线程读,并且写入和读取相互不被影响。这样的假设提高了NoSQL系统的性能,并使得系统的设计更为简单。
3)数据结构
关系型数据库的存储引擎是一颗动态的磁盘B+树,为了提高性能,可能需要有insert buffer聚合写,query cache缓存读,因而常常需要缓存管理机制,数据库里数据的读取和写入是互相影响的,因而系统的性能不高。然而,在NoSQL系统中,数据首先被写入到内存,当数据量达到一定的程度时才会dump到磁盘而生成SSTable文件。相对于关系型数据库的动态的B+树, SSTable就是一个排列有序的有序数组。显而易见,实现一个有序数组要比实现一个动态B+树简单且高效的多。
4)Join操作
关系型数据库需要在存储引擎层面支持Join,而NoSQL系统一般会根据具体的应用实例来决定Join实现的方式。NoSQL基本上不进行复杂处理,它只应用在特定领域,这一点恰好弥补了关系型数据库的不足。
4 结束语
在大数据信息时代,传统的关系型数据库已经不能适应大规模数据高并发的操作,无法满足用户日益增长的需求。而NoSQL数据库的出现,极大的弥补了关系型数据库的不足,它灵活的数据模型,易于扩展以及高可用的特性,能够最大程度的节省开发和维护成本,这使得NoSQL数据库正在成为数据库领域的重要力量。传统的关系型数据库有着标准规范的语言以及对复杂事务的出色处理等优点,如果能将两者紧密结合起来,那么将会给web2.0的数据库发展带来一个新的思路,让数据库的发展朝着更加稳定、安全、高效的方向前进,这也是我们接下来主要的研究方向。
参考文献:
[1] COULTER T. Costing: non traditional data stores versus traditional DBMS technologies[C] //Technology Management in the Energy Smart World(PICMET).2011 IEEE Proceedingt.
[2] 郭鹏.Cassandra 实战[M].北京:机械工业出版社,2011.
[3] 马帅,李建欣,胡春明.大数据科学与工程的挑战与思考[J].中国计算机学会通讯,2012,8(9).
[4] 程学旗,靳小龙,王元卓,等.大数据系统和分析技术综述[J].软件学报,2014,25(9).