Microcomputer Applications V ol.27,No.10,2011
开发应用微型电脑应用2011年第27卷第10期
55
文章编号:1007-757X(2011)10-0055-04NoSQL 数据库与关系数据库的比较分析
吕明育,李小勇
摘要:介绍了两个具有代表性的NoSQL 数据库:Bigtable 和Dynamo 系统。首先,描述了Bigtable 和Dynamo 的适用范围及其产生原因。Bigtable 和Dynamo 可以高效的处理web 数据提供相应服务;然后,介绍了Bigtable 和Dynamo 系统的架构、特性等,以及各自独特的设计方法。最后,将这两个数据库与传统的关系数据库进行比较分析,描述了它们之间的不同点,对比结果表明NoSQL 数据库在处理web 应用数据时是高效可用的,比传统关系数据库更占优势。
关键词:Bigtable ,Dynamo ,NoSQL ,关系数据库
中图分类号:TP311文献标志码:A
0引言
以MySQL ,Oracle ,Sybase ,PostgreSQL 为代表的传
统关系数据库在过去的20多年里得到了广泛应用,但面对
新兴的web 应用却表现出诸多不足。Web 应用和服务在数
tablet和laptop的区别
据访问操作中主要面向准结构化数据和非结构化数据,其需
求与传统数据库所管理的结构化数据有显著区别,这些新兴
的应用并不需要传统数据库所支持的ACID 语义,但在系统
的可扩展性与并发访问能力上有更高的要求。面向这类应用
设计的数据库一般称为NoSQL 数据库。随着web 应用的普
及与数据量的爆炸性增长,NoSQL 已成为目前产业界和学
术界研究的热点,也涌现了一些具有显著特的NoSQL 数
据库系统。
其中最有代表的是Google 的Bigtable 系统、Amazon
公司的Dynamo 系统、Yahoo 的PNUTS 、Hadoop 的一个项
目Hbase 等等。本文将对前两个NoSQL 数据库系统进行介
绍,并将其与传统的关系型数据库进行比较和分析。1Bigtable 系统
1.1Bigtable 的介绍
Bigtable 的设计是为了能可靠地处理PB 级的海量数
据,使其能够部署在千台机器上。Bigtable 具有广泛的适用
性、可扩展性、高性能和高可用性等优点。它在很多方面和
传统数据库很类似,实现了传统数据库的很多应用。并行数
据库[2]和内存数据库[3]已经具备了高可用性和高性能,但是
Bigtable 提供了和这些系统不同的接口,表现出不一样的特
性。Bigtable 不支持完整的关系数据模型,相反,它提供给
用户一个简单的数据模型,用户可以利用这个模型动态处理
数据的分布和格式,并且可以自己推断出底层存储数据的相
关性。此外,Bigtable 还可以与MapReduce 一起使用[4]。
1.2Bigtable 的架构
Bigtable 架构如图1
所示:
图1Bigtable 架构图2Dynamo 架构
Bigtable 包含了3个主要的组件:链接到每个客户的库,一个Master 服务器和多个Tablet 服务器。根据负载情况的变化,Bigtable 可以动态的向集中添加或者删除Tablet 服务器[5]。Master 的主要任务是向Tablet 服务器分配Tablet ,检测是否有新加入或者失效的Tablet 服务器,对Tablet-server 进行负载均衡,以及对GFS [6]上文件进行垃圾收集。除此之外,它还可以进行模式修改,例如表和列族的建立。每个Tablet 服务器都管理了一系列的Tablet 。每个Tablet 服务器处理它自身上面的Tablet 的读写请求,并且当其上面的Tablets 增长到一定程度对过大的Tablets 进行分割。和很多的单一Master 分布式存储系统类似,客户端读取的数据不经过Master ,客户直接和Tablet 服务器通信进行读写操作。Bigtable 依赖一个高可用和持续分布式锁服务器Chubby[7]进行管理。Chubby 提供了一个名字空间,里面包含了目录和小文件。每个目录或者文件可以当成是一个锁,读写文件的操作都是原子的。每个Chubby 的客户程序
都维护一个与Chubby 服务的会话。Bigtable 使用Google 的分布式文件系统(GFS )存储日志文件和数据文件。Bigtable 集通常运行在一个共享的机器池里,Bigtable 依赖集管理系统调度任务、管理共享机器上的资源、处理机器的故障以及监视机器的状态。
—————————————作者简介:吕明育(1989-),女,内蒙古,上海交通大学信息安全学院硕士研究生。研究方向:存储系统、高性能网络,上海,200240
李小勇(1972-),男,甘肃,上海交通大学信息安全学院副教授。研究方向:存储系统、高性能网络,上海,200240
Micr ocomputer Applica tions V ol.27,No.10,2011开发应用微型电脑应用2011年第27卷第10期
561.3Bigtable 设计特
1.31Bigtable 的数据结构
Bigtable 是一个稀疏的、分布式的、持久化存储的多维
度排列的映射[8]。这个映射的索引是行关键字、列关键字以
及时间戳。映射中每一项的值都是一个字节元组,即(row :
string ,column :string ,time :int64)->string 。
行关键字可以是任何的字符串,对同一个行关键字的读
和写都是原子的。Bigtable 通过行关键字的字典顺序来组织
数据。表中的行范围是可以任意分区的。每个分区是一个
Tablet ,是数据分布和负载均衡的最小单位。列关键字组成
的集合叫做列族,列族是访问控制的基本单位。在Bigtable
中,表中的每一个数据项都可以包含不同的版本,通过时间
戳来进行索引。数据项中,不同版本的数据按时间戳的倒序
进行排列,最新的版本最先读到。
2Dynamo 系统
2.1Dynamo 的介绍
Dynamo 用简洁的key/value 的接口来实现存储非结构
化的数据,具有可扩展性和可用性等优点。Dynamo 采用一
致性哈希算法(consistent hashing )进行数据分区。复制时
因为更新产生的一致性的问题通过quorum 机制和去中心化
的同步复制协议进行解决。
3.2Dynamo 的架构
如图2
所示:图2Dynamo 架构
Amazon 使用完全去中心化的分布式架构[9],在集中
每一台机器都是对等的,不会出现单点问题。设计Dynamo
时放松了数据一致性的要求,因此Dynamo 中的数据存在不
一致的情况。
Amazon 架构有多层请求服务层,为了保证应用系统能
够在有限的时间内获得功能服务,每个依赖的平台都需要在
有限的时间内提供功能服务。客户端和服务器端提供了服务
水平协议(SLA ),即一个正式的客户端和服务器端的协商
协议,其中规定了很多系统相关的特征。图2架构中页面生
成组件(page rendering components )通过查询服务器返回动
态的网页内容。每个服务都可以通过在服务范围内可访问的
不同的数据存储中心来管理自身状态。
2.3Dynamo 设计特
2.3.1总是可写的
Dynamo 设计的理念是设计一个总是可写的数据存储系
统。因为对于一些Amazon 服务,拒绝客户的更新或写操作
会导致很差的用户体验,这就要求Dynamo 的写操作都不会被拒绝[10]。假如每次要求写N 个副本,如果N 中一个节点发生故障,Dynamo 立即写入到preference list 中的下一个节点,确保永远可写入。2.3.2分区算法分布式架构最初的分区算法是基本哈希算法,即hash ()mod n ,n 是节点数。系统中的每个节点都被分配一个随机数,使用哈希函数对这个随机数计算后得到相应的它在环上位置。每个数据项都由一个key 值唯一标识,同样的对数据项的key 值进行哈希运算也得到它在环中的位置,然后顺时针的查环上第一个大于数据项的位置的节点,将数据存储在这个节点上。这样每个节点都负责了分布在环上它和它前一个节点之间区域的数据。但是基本哈希算法存在一些挑战,首先,每个环上节点的随机位置分配导致了数据分配不均。第二,基本算法忽略了每个节点性能上的差异。第三,节点数发生变化的时候会导致大量数据迁移。为了解决这些问题,Dynamo 采用consistent hashing 算法进行分区[13]。它将环上的节点看成是虚拟节点,而实际的节点包含了一个或者多个虚拟节点。如图3
所示:
图3Dynam o 数据分区
A 到G 表示的都是虚拟节点,可以将A 和
B 分配到同一个节点上,E 、F 和G 分配到同一个节点上。这样就可以根据每个节点的存储能力分配相应的数据量。2.3.3数据版本Dynamo 使用vector clock[13]算法进行不同版本的区分。一个vector clock 使用一系列的(node ,counter )对来进行标记,每一个vectorclock 标记了每个对象的不同版本。来说明Dynamo 是如何进行版本之间的冲突处理的,如图4
所示:图4Dynam o 数据版本
Microcomputer Applications V ol.27,No.10,2011开发应用微型电脑应用2011年第27卷第10期
51.
假设有一个写请求,在第一次被节点Sx 处理后,
节点Sx 就会增加一个版本信息D1([Sx,1])。
2.当Sx 节点继续对数据进行更改,数据变为D2
([Sx,2])。这个时候D2可以覆盖D1,不会有冲
突产生。
3.现在假设Sx 将数据传播到其他的节点Sy 和Sz 。
Sy 和Sz 收到的是其他节点复制给他们的数据,
所以不产生新的版本,Sy 和Sz 都持有数据D2
([Sx,2])。这个时候Sy 对数据进行写操作,就会
产生一个新的版本,数据变成D3([Sx,2],[Sy,1]),
增加了Sy 的版本信息。同理,Sz 节点对数据进
行处理后得到数据D4([Sx,2],[Sz,1])。
4.当这些版本还没有传播开来的时候,有一个读操
作,要从三个节点上读取数据,也就是D2
([Sx,2]),D3([Sx,2],[Sy,1]),D4([Sx,2],[Sz,1]),
这时就要解决合并的问题,假设合并了三个节点
数据的版本后,Sx 节点重新进行写操作,数据
D5([Sx,3],[Sy,1],[Sz,1])就会覆盖掉以前的旧数
据。
2.3.4Quorum NRW
Dynamo 中的数据也存在很多副本,为了保持副本的一
致性,Dynamo 使用一个类似于quorum 的一致性协议。这
个协议中有两个关键配置信息,R 和W 。其中R 是成功读
操作的最小节点数,W 是成功写操作的最小节点数。N 指
的是数据对象复制的节点数量。配置的时候只要要求
W+R>N,也就可以每次读取的数据中至少有一个最新的版
本,这样就可以保证强一致性,W+R>N 会产生类似quorum
的效果。在系统开发时,可以根据不同的要求,对W 和R
进行配置。3Bigtable ,Dynamo 及传统关系数据库比较分析
3.1比较
从以上对Bigtable 系统和Dynamo 系统的简单介绍可
知,这两个NoSQL 数据库与传统数据库有着很多不同的特
点。本节将对Bigtable 、Dynamo 和传统并行分布式关系数
据库从不同方面进行比较,如表1所示:
表1Dynamo 、Bigtable
与并行关系型数据库的比较3.2分析本节将对4.1中的表格解释分析。其中数据结构不再另作说明;架构已经在上述章节中详细介绍过,也不再赘述。
1)查询:Dynamo 里每个数据都是由key 唯一标识的,查询的时候也是只能支持主键查询的,而Bigtable 相比于Dynamo 查询更灵活,它可以进行单个列的查询,但是不能像关系数据库一样进行多个表间的复杂查询。2)读写特性:Dynamo 系统实现了总是可写的设计,致使在读取数据时非常复杂,它要求读数据时要进行版本的冲突处理,判断出哪个数据是最新的数据版本。Bigtable 在写数据时要求同时写N 个节点数据,当节点写成功数满足要求时才成功完成此次写操作,否则写失败。读数据时可读取任一最新数据。关系数据库使用事务处理读写操作,满足ACID 原则,当所有的操作都成功完成,才进行commit 数据[14]。因此Bigtable 和关系数据库中的数据都是有效数据,而Dynamo 中可能存在不一致的数据。3)扩容:Dynamo 和Bigtable 都表现出很好的扩展性。由于web 数据之间的关系不是很紧密,所以只需根据数据的增加和减少进行相应的添加和删除节点。Dynamo 中添加节点后,数据进行重新的负载均衡,一部分的数据从一些节点上迁移到新添加的节点。Bigtable 的集中存储了很多表,每个表包含一个Tablet 集合,初始时一个表只有一个Tablet ,随着表中数据增长,它将自动分割为多个Tablet 。当添加了一个Tablet 服务器后,其他Tablet 服务器中的Tablets 将迁移到新添加的Tablet 服务器。而关系型数据库的扩展却很难。关系型数据库通常在单个节点上伸缩自如。一旦单个节点的能力达到了上限,就需要向多个服务器分发负载进行扩展。关系型数据库都是通过ACID 进行管理的,所以如何在多个节点间进行操作就会变得非常复杂[15],造成关系数据库扩展性很差。4)负载均衡:Dynamo 使用consistent hash 算法,将数据均匀的分布到各个虚拟节点,并且每个节点根据自己的存储能力来决定存储容量,实现性能好的节点存储数据较多。Bigtable 是由Master 决定每个Tablet 服务器的存储Tabl
et 的能力。例如集中新添加一个Tablet 服务器,Master 将一部分的Tablet 转移到新的Tablet 服务器上。并行关系型数据库对数据进行划分,如水平划分、垂直划分等,并将数据复制到不同的节点,使负载尽量均衡化。5)数据版本:上述已经介绍过Dynamo 的数据版本是通过vector clock 进行管理的。由于Dynamo 对一致性要求
不高,所以N 个节点的数据会出现不一致的情况。Bigtable
中的数据存储是多维度排序映射,它可以有多个不同版本的
数据,用时间戳进行标识,这样即可在Bigtable 中查询到不
同的历史数据,数据复制存储在多个不同的节点上。关系数
据库中的数据只有一个版本,为了提高并行性,数据复制到
N 个不同节点,但是所有节点的数据保持一致性。
4结束语
本文简单的介绍了NoSQL 数据库的两个代表系统:
Bigtable 系统和Dynamo 系统的架构以及特性等,并对
Bigtable 系统、Dynamo 系统和关系数据库的比较分析。关
系型数据库存储了数据之间存在的或者潜在的关系,适合于
企业数据的存储及查询;而NoSQL 数据库更加看重对数据
的存储,适合于现在的web 应用。随着现在网络数据的爆
7
Micr ocomputer Applica tions V ol.27,No.10,2011开发应用微型电脑应用2011年第27卷第10期5炸式增长,NoSQL 数据库得到了广泛的使用,但现有的
NoSQL 数据库还不够成熟,如何将关系数据库和NoSQL 数
据库有效融合将成为未来发展的一个新的研究方向[1]。参考文献:
[1]Chris Bunch,NavrajChohan,Chandra Krintz,Jovan
Chohan,Jonathan Kupferman,Puneet-
Lakhina,YimingLi,Y oshihide Nomura.Key-V alue
Datastores Comparison in AppScale.February 17,2010
UCSB Tech Report 2010-03
[2]DEWITT,D.J.,AND GRA Y,J.Parallel database
systems:The future of high performance database sys-
tems.CACM 35,6(June 1992),85–98.
[3]DEWITT ,  D.,KA TZ,R.,OLKEN,  F.,SHA-
PIRO,L.,STONEBRAKER,M.,AND WOOD,D.
Implementationtechniques for main memory database
systems.In Proc.of SIGMOD (June 1984),pp.1–8.
[4]DEAN,J.,AND GHEMAWA T,S.MapReduce:
Simpli eddata processing on large clusters.In Proc.of
the 6th OSDI(Dec.2004),pp.137–150.
[5]Daniel J.Abadi.Y ale UniversityNew Haven,CT,USA.
Data Management in the Cloud:Limitations and Oppor-
tunities.
[6]GHEMAW AT,S.,GOBIOFF,H.,AND LEUNG,S.-T.
TheGoogle le system.In Proc.of the 19th ACM SOSP
(Dec.2003),pp.29–43.
[7]BURROWS,M.The Chubby lock service for loose-
ly-coupled distributed systems.In Proc.of the 7th
OSDI(Nov.2006).
[8]SBernstein,P.A.,and Goodman,N.An algorithm for
concurrency control and recovery in replicated distributed
databases. Database Systems,9(4):596-615,December 1984[9]
Chang,F.Dean,J.Ghemawat,S.W.Hsieh,D.Wallach,M.Burrows,T.Chandra,  A.Fikes,and R.Gru-ber.Bigtable:A Distributed Storage System for Structured Data.In Symposium on Operating System Design an-dImplementation,2006.[10]Gray,J.,Helland,P.,O'Neil,P.,and Shasha,D.1996.The dangers of replication and a solution.In Proceedings of the 1996ACM SIGMOD international Conference on Management of Data (Montreal,Quebec,Canada,June 04-06,1996).J.Widom,Ed.SIGMOD '96.ACM Press,New York,NY ,173-182.[11]David Karger,EricLehmanl,TomLeighton,Matthew Levine,Daniel Lewin and RinaPanigrahy.Consisten-tHashingandRandomTrees:Distributed Caching Protocols forRelieving Hot Spots on the W orld Wide Web.[12]Giuseppe DeCandia,DenizHastorun,MadanJampani,GunavardhanKakulapati,AvinashLakshman,Alex Pilchin,SwaminathanSivasubramanian,Peter Vosshall and W ern-er V ogels.Dynamo:Amazon ’s Highly A vailable Key-value Store.Amazon [13]Lamport,L.Time,clocks,and the ordering of events in adistributed system.ACM Communications,21(7),pp.558-565,1978.[14]Thomas,R.H.A majority consen
sus approach to con-currency control for multiple copy databases.ACM Transactions on Database Systems 4(2):180-209,1979.[15]Andrew Pavlo,Erik Paulson,Alexander Rasin,Daniel J.Abadi,David J.DeWitt,Samuel Madden and Michael Stonebraker.A Comparison of Approaches to Large-Scale Data Analysis.(收稿日期:2011.06.18)(上接第54页)
手语动作的仿真,其次给出了三维虚拟人手语动作的所有可
能手势和不可能手势,基于可能的手势实现了三维虚拟人最
小骨骼模型连续手势的变换,实现了三维虚拟人的手语动
作。该方法即解决了手语动作网络传输的难题,又没有降低
实时性,实现了聋哑人的手语动画效果。另外对于辅助教学、
医疗研究、电影制作、游戏娱乐等应用领域也可以采用本文
的方法。在今后的工作中,我们将进一步研究三维虚拟人的
皮肤模型,以便实现更加逼真的三维虚拟人的手语动作。参考文献:
[1]Herda L ,Fua P ,Plaenkers R ,et al .Using skeleton-based
tracking to increase the reliability of optical motion cap-
ture[J]Human Movement Science Journal ,2001,20(3):313~341.
[2]Herda L .Fua P .Plaenkers R ,et al .Skeleton-based motion capture for robust reconstruction of human mo-tion [A].In :Proceedings of Computer Anima-tion2000,Philadelphia ,Pennsylvania ,2000.77~85.[3]Raunhardt D.,Boulic .R .Motion Constraint .The Visual Computer (2009)25:509 518.[4]
Wang Zhaoqi ,Gao Wen .A method to synthesize Chinese sign language based on virtual human technolo-gies [J].Journal of Software ,2002,13(10):2051~2056(in Chinese).(王兆其,高文.基于虚拟人合成技术的中国手语合成方法[J].软件学报,2002,13(10):2051~2056.)[5]杨长水,王兆其,高文,陈益强.个性化虚拟人体模型骨架生成方法[J].计算机辅助设计与图形学学报,2004,16(1):67—72.
(收稿日期:2011.07.12)
8

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。