Key-Value数据库及其应用研究

2012-04-29 00:44苏翔宇
电脑知识与技术 2012年5期
关键词:可扩展性键值云计算

苏翔宇

摘要:互联网技术的迅猛发展使得传统的关系数据库在应对海量数据访问处理时面临巨大的挑战,而作为非关系数据库代表的Key-Value数据库以其卓越的性能和可扩展性为解决此类问题提供了切实可行的解决方案。该文在对Key-Value数据库与关系数据库进行详细对比的基础上,提出了Key-Value数据库的基本概念,并指出了Key-Value数据库的适用领域,然后对业内的Key-Value数据库产品进行了简单的分类并介绍了各类的典型应用,最后总结了当前Key-Value数据库发展所遇到的主要问题。

关键词:键值;云计算;可扩展性

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)05-1009-03

Research on Key-Value Database and its Application

SU Xiang-yu

(Shenzhen Institute of Technology, Shenzhen 518045, China)

Abstract:Due to the rapid development of Internet technology, the relational database faces with the huge challenge when solving large scale accessing of massive data. A new type of database which named Key-Value database, as the representative of non-relational database, provides feasible solution by outstanding performance and scalability. This paper, on the basis of the comparison between the relational data? base and Key-Value database, puts forward the concept of Key-Value database and describes the fields of application of it. Furthermore, normal Key-Value databases were classified, with which typical uses of each were introduced. The summarizations of the problems during the development of normal Key-Value databases were also discussed.

Key words:Key-Value; cloud computing; scalability

随着互联网技术的迅猛发展,网络访问数据量呈指数级增长,提高对海量数据的管理访问能力的需求变得越来越迫切。特别是在当今云计算的技术变革之下,海量数据和巨大的用户数量对存储资源和计算资源的可扩展性提出了更高的要求。传统的关系数据库并不能提供这些应用所需要的高可扩展性。一种新型的、存储非关系型数据的、具有高可扩展性的Key-Value数据库系统应运而生。

1 Key-value数据库的概念及由来

1.1 NoSQL,Key-Value的由来

21世纪初,随着Web2.0技术的兴起,互联网进入了一个全新的高速发展期,海量数据的产生使得关系数据库系统的存储和快速访问能力面临巨大挑战,越来越多的基于非结构化数据模型的应用日趋广泛,这些应用对传统关系数据库的一些特性并不关注,传统关系数据库的地位正受到多方的挑战。

在这种背景下,NoSQL (Not Only SQL)的概念在业内产生,即放弃了关系数据库中数据表严格的字段结构和表格之间的关系限制,以键值对存储数据,数据结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少很多时间和空间的开销。对于数据模型的简化,使得NoSQL数据库更专注于性能和可扩展性方面的提升。

NoSQL数据库主要包括文档存储、列存储、Key-Value存储三种类型。Key-Value数据库作为NoSQL数据库中的重要类型,因其在应对海量数据存储和大规模并行访问方面的优势赢得了众多用户的青睐。

1.2 Key-Value数据库的概念

Key-Value数据库,也称键值数据库,目前业内还没有统一的定义,它有时也被称做共享排序数组或分布式哈希表等。Key-Value数据库是基于键值对数据存储模型的数据库管理系统(DBMS),其数据存储元组没有统一的字段格式要求,数据的存储与访问均是以键值对作为标识进行的。

2 Key-value数据库与关系数据库的对比

Key-Value数据库系统的目的就是存储海量半结构化和非结构化数据,应对数据量和用户规模的不断扩展。对于传统的关系数据库系统来说,这种目标是可望而不可及的。Key-Value数据库系统的目标并不是最终取代关系数据库系统,而是弥补关系数据库系统的不足,使得两者能够优势互补。

2.1与关系数据库系统的区别

虽然都是管理数据,但Key-Value存储系统和关系数据库系统是完全不同的。

1)关系数据库系统中,数据库包含表,表包含行和字段,行由各个字段的数据值组成,在一个表中的行都拥有相同的数据格式。在Key-Value存储系统中,并不包含策略和关系数据库那样的数据表,其一般包含域或桶,各个域或桶中包含若干条数据记录。

2)关系数据库拥有良好的数据模型定义,包含策略、表之间的关系、事务等机制。数据之间的关系是建立在数据本身基础上的,而不是基于上层应用的需要。在Key-Value存储系统中,数据记录只是简单地通过一个键值标识来识别和获取,数据之间没有关系的概念。

3)关系数据库很好的提高了数据的共享能力并减少了数据冗余,而Key-Value存储系统一般需要进行数据冗余以保证其可靠性。

4)关系数据库适用于存储传统的数据,如字符串、数字的存储和查询。Key-Value存储系统则适用于海量的非关系型数据的存储和查询。

总之,Key-Value数据库系统和关系数据库系统从本质上是不同的,其在需要可扩展性的系统中和需要进行海量非关系数据查询和操作的环境中占有明显的优势。

2.2 Key-Value数据库系统的主要特性

Key-Value数据库系统摒弃了关系数据库系统中的一些关键特性,如读写实时性、严格的事务一致性等,这使得其充分利用了并行计算和分布式应用的优点,并专注于非结构化数据处理、系统可扩展性、可靠性等。当前,Key-Value数据库系统的特性主要体现在以下几个方面:1)高可扩展性

Key-Value存储系统提供了非常高的可扩展性,用户通常只需根据自己的需求规模进行相应的配置即可,当需求增长时配额也能随之增加。由于没有了数据表严格的字段结构和表格之间的关系限制,Key-Value系统可以很容易的在多台服务器上部署分布式应用,从而提升整个系统的伸缩性,更加方便灵活。

2)适应云计算要求的海量存储和高吞吐能力

Key-Value存储系统是云计算的最佳搭档,云计算就是需要灵活的应对用户对可伸缩性的需求,这正是Key-Value系统的专长所在。如果试图把规模庞大的系统伸缩需求交给上百台服务器去处理,那么Key-Value存储系统应该是一个比较好的解决方案。Key-Value存储系统的高吞吐能力在应对大规模并行运算和负载均衡方面更是数据存储解决方案的不二选择。

3)数据元组的格式较为灵活

由于不需要复杂的数据格式要求,在Key-Value数据库中对数据元组中的字段的操作都较为方便快捷,不会明显的影响服务器性能,而这在关系数据库中特别是针对多表关联的字段操作则往往是性能的噩梦。

3 Key-Value数据库的分类及典型应用

由于互联网快速发展对非关系型数据处理的需要越来越强烈,业内和学术界对Key-Value存储系统的研究投入不断加大,目前市面上已经出现了多种商业系统和开源产品,这些系统在很多企业级应用中都已经发挥了十分重要的作用。

当前Key-Value数据库产品的种类较多,但业内对这些系统的分类还没有形成比较统一的看法,分类标准也没有达成共识,有按照系统架构和数据模型进行分类的,也有按照查询存储功能划分的,但更为常见的是按照Key-Value存储系统的设计目标来分类。

从设计目标来看,现有的Key-Value数据库产品大致可分为三类:

3.1面向高读写性能需求的Key-Value存储

典型代表是Redis,Memcached等。Redis是一款高性能的内存Key-Value缓存数据库服务器,其通过缓存数据库查询结果,减少对数据库的访问次数,以提高动态Web应用的速度,从而提高系统的可扩展性。Redis设计简约,性能出众,每秒可以处理超过10万次读写操作,非常适合于快速开发,并为多种编程语言都提供了应用编程接口。国内著名的新浪微博就是Redis成功应用的一个典型范例。

Redis的主要特性包括:

1)不仅支持简单的Key-Value数据,同时还提供list、set、hash等多种数据结构的存储和操作。

2)支持数据的持久化,可以将内存中的数据定期通过异步I/O操作保存到硬盘中,重启的时候再次加载使用。

3)支持数据备份,即master-slave模式的数据备份。

Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,而且本身不支持分布式访问多个物理缓存,需要另外开发客户端程序才能进行分布式应用部署。因此,Redis适用的场景主要是在较小数据量的高性能操作和运算上。

3.2面向文档的Key-Value存储

MongoDB、CouchDB是这种类型的典型代表。MongoDB是一款强大、灵活、可扩展的文档型数据库,它扩展了关系数据库的众多功能,如辅助索引、范围查询和排序等。由于MongoDB在非关系数据库的基础上继承了很多传统的关系数据库中的特性,使得其在实际的项目应用中对Mysql等数据库产品的市场份额产生了巨大的冲击。MongoDB的基本思路就是将原来的“行”的概念转换成更加灵活的“文档模式”。面向文档的方式可以将文档或者数组内嵌进来,用一条记录就可以表示非常复杂的层次关系。MongoDB的数据模型对开发者非常友好,提供了驱动程序和自然语言式的应用编程接口。

MongoDB的主要特性包括:

1)面向文档的存储,适合存储对象及JSON形式的数据。

2)动态查询,支持丰富的查询表达式,可轻易查询文档中内嵌的对象及数组。

3)高效的传统存储方式,支持二进制数据及Blob对象,存储图片、视频等对象更方便快捷。

4)自动分片以支持云级别的伸缩性,自动分片功能支持水平的数据库集群,可动态添加额外的机器。

5)支持Map/Reduce计算,便于部署分布式应用,具有强大的数据分析能力。

MongoDB的主要缺点是对存储数据的磁盘空间的需求较大,对系统硬件的要求较高,因此,MongoDB适用于部署海量数据的多服务器分布式应用,不适用于要求高度事务性和复杂的跨文档级联查询的系统。

3.3面向列的Key-Value存储

典型代表是Cassandra,Bigtable,Project Voldemort等。著名的Facebook、twitter都是使用Cassandra的最成功的范例。Cassandra是一款面向列的Key-Value数据库,它不是一个数据库,而是由很多数据库节点共同构成的一个分布式网络数据库服务系统。因此,对于一个Cassandra群集来说,扩展性能是非常简单的事情,只管在群集里面添加节点就可以了,Cassandra还会自动完成数据的同步操作。对于Cassandra的读写操作,都会被复制或经路由转到其他节点上去处理,这种对于大量的随机读写需求的支持,使其特别适用于网络社交平台和云计算应用等领域。

Cassandra的主要特性包括:

1)模式灵活,增删字段等操作都非常方便。

2)支持范围查询,可以对任意Key进行范围查询,支持二级索引查询,可以对任意列的值进行查询。3)数据具备最终一致性,集群整体的可用性高。

4)高可用、可扩展,无中心节点设计使得单点故障不影响集群服务,集群性能可线性扩展。5)支持Map/Reduce计算,可对数据批量进行复杂分析运算。

6)数据可靠性高,数据写入的同时在磁盘中完成存储,不容易丢失。

Cassandra的主要缺点是其单个节点并发读写性能不是特别好,但是评价Cassandra单个节点的性能是没有太大意义的,真正的分布式数据库访问系统必然是由多个节点所构成的,其并发性能取决于整个系统的节点数量、路由效率,而不仅仅是单节点的并发负载能力。

4当前Key-value数据库发展所遇到的主要问题

4.1数据模型简单,普适性、兼容性较差

Key-Value存储系统简单的数据模型很大程度上提升了其性能和可扩展性,但与此同时,由于没有统一严格的数据结构,其很难满足商业应用中许多复杂多变的业务需求,而开发人员重新进行业务规划和建模势必需要大量的成本投入。不同的Key-Value数据库都有着各自的API和特定的查询接口,没有像关系数据库SQL这种统一的标准化接口语言,因此可以预见,兼容性在系统集成的过程中会成为一个不可回避的问题。因此在绝大多数应用中,Key-Value数据库还是需要和关系数据库结合使用,发挥各自的特长,做到取长补短。

4.2忽略数据一致性、完整性要求的代价

关系数据库的约束性保证数据在最低层次拥有完整性,违反完整性约束的数据是不可能存在于关系数据库系统中的,而Key-Value存储系统一般都不同程度地放宽了对一致性和完整性约束的要求。Key-Value存储系统不存在这些约束使得程序员不得不承担起确保数据完整性的重要责任。然而在实际过程中,程序员经常会犯错误,使得系统出现一些Bug,这很可能引起数据完整性问题。

5结束语

Key-Value数据库专注于非结构化数据存储、系统可扩展性和可靠性,这使得其在海量数据存储访问特别是云存储领域会有非常广阔的发展前景。但由于其在普适性、数据模型完整性方面的欠缺,并不能完全取代关系数据库系统,两者需要优势互补、长期共存。在相当长的一段时间,关系数据库依然会因其自身的简单性、可靠性、普适性在很多传统的应用中占据绝大多数的市场份额。而Key-Value数据库会在网络社交平台、电子商务等一些新兴的应用领域中赢得自己的一片天空。

参考文献:

[1] Silberschatz A,Korth H F,Sudarshan S.数据库系统概念[M].北京:机械工业出版社,2006.

[2]邓倩妮,陈全.云计算及其关键技术[J].高性能计算与发展应用,2009(1):2-6.

[3]中国互联网信息中心[EB/OL].http://www.cnnic.net.cn/index/0E/00/11/.

[4] Codd E F.A relational model of data for large shared data banks[J].Communications of the ACM,1970,13(6):377-387.

[5] Michael Stonebraker.SQL databases v.NoSQL databases [J].Communications of the ACM,2010,53(4):10-11.

[6] Karger D,Lehman E,Leighton T,et al.Consistent hashing and random trees:distributed caching protocols for relieving hot spots on the World Wide Web[C]//ACM Symposium on Theory of Computing.New York ,NY,USA:ACM,1997:654-663.

[7] Kubiatowicz J,Bindel D,Chen Y,et al.OceanStore:An architecture for global-scale persistent storage[C]//Proceeedings of the Ninth interna? tional Conference on Architectural Support for Programming Languages and Operating Systems(2000).Boston,MA:ASPLOS,2000:190-201.

猜你喜欢
可扩展性键值云计算
非请勿进 为注册表的重要键值上把“锁”
恩智浦推出全新i.MX 8X 处理器,为工业应用带来更高的安全性、可靠性和可扩展性
电力监控软件的可扩展性设计
一键直达 Windows 10注册表编辑高招
基于云计算的移动学习平台的设计
实验云:理论教学与实验教学深度融合的助推器
云计算中的存储虚拟化技术应用
基于微软技术的高可扩展性中小企业系统解决方案研究
构建高可扩展性的物流装备管理系统
注册表值被删除导致文件夹选项成空白