云计算背后的秘密(6)-NoSQL数据库的综述
作者 吴朱华 | 2010-12-29 07:19 | 类型 云计算, 行业动感 | 21条用户评论 »
系列目录 云计算的秘密
我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoSQL有了非常深入的研究,但是在最近准备YunTable的Chart的时候,发现NoSQL不仅非常博大精深,而且我个人对NoSQL的理解也只是皮毛而已,但我还算是一个“知耻而后勇”的人,所以经过一段时间的学习之后,从本系列第六篇开始,就将和大家聊聊NoSQL,而本篇将主要给大家做一下NoSQL数据库的综述。 首先将和大家聊聊为什么NoSQL会在关系型数据库已经非常普及的情况下异军突起?
诞生的原因随着互联网的不断发展,各种类型的应用层出不穷,所以导致在这个云计算的时代,对技术提出了更多的需求,主要体现在下面这四个方面:
虽然关系型数据库已经在业界的数据存储方面占据不可动摇的地位,但是由于其天生的几个限制,使其很难满足上面这几个需求:
业界为了解决上面提到的几个需求,推出了多款新类型的数据库,并且由于它们在设计上和传统的SQL数据库相比有很大的不同,所以被统称为“NoSQL”系列数据库。总的来说,在设计上,它们非常关注对数据高并发地读写和对海量数据的存储等,与关系型数据库相比,它们在架构和数据模型方量面做了“减法”,而在扩展和并发等方面做了“加法”。现在主流的NoSQL数据库有BigTable、HBase、Cassandra、SimpleDB、CouchDB、MongoDB和Redis等。接下来,将关注NoSQL数据库到底存在哪些优缺点。
优缺点在优势方面,主要体现在下面这三点:
但瑕不掩瑜,NoSQL数据库还存在着很多的不足,常见主要有下面这几个:
上面NoSQL产品的优缺点都是些比较共通的,在实际情况下,每个产品都会根据自己所遵从的数据模型和CAP理念而有所不同,接下来,将给大家介绍NoSQL两个最重要的概念:数据模型和CAP理念,并在本文最后,对主流的NoSQL数据库进行分类。
数据模型传统的数据库在数据模型方面,主要是关系型,它的特色是对Join类操作和ACID事务的支持。在NoSQL领域,主要有三种主流的数据模型: Column-oriented(列式) 列式也主要使用Table这样的模型,但是它并不支持类似Join这样多表的操作,它的主要特点是在存储数据时,主要围绕着“列(Column)”,而不是像传统的关系型数据库那样根据“行(Row)”进行存储,也就是说,属于同一列的数据会尽可能地存储在硬盘同一个页(Page)中,而不是将属于同一个行的数据存放在一起,这样做的好处是,对于很多类似数据仓库(Data Warehouse)的应用,虽然每次查询都会处理很多数据,但是每次所涉及的列并没有很多,这样如果使用列式数据库的话,将会节省大量I/O,并且大多数列式数据库都支持Column Family这个特性,通过这个特性能将多个Column并为一个小组,这样做好处是能将相似Column放在一起存储,这样能提高这些Column的存储和查询效率。总体而言,这种数据模型的优点是比较适合汇总(Aggregation)和数据仓库这类应用。. Key-value 虽然Key-value这种模型和传统的关系型相比较简单,有点类似常见的HashTable,一个Key对应一个Value,但是其能提供非常快的查询速度、大的数据存放量和高并发操作,并非常适合通过主键对数据进行查询和修改等操作,虽然不支持复杂的操作,但是可以通过上层的开发来弥补这个缺陷。 Document(文档) 在结构上,Document和Key-value是非常相似的,也是一个Key对应一个Value,但是这个Value主要以JSON或者XML等格式的文档来进行存储,是有语义的,并且Document DB一般可以对Value来创建Secondary Index来方便上层的应用,而这点是普通Key-Value DB所无法支持的。
CAP理论这个理论是由美国著名科学家,同时也是著名互联网企业Inktomi的创始人Eric Brewer在2000年PODC(Symposium on Principles of Distributed Computing)大会上提出的,后来Seth Gilbert 和 Nancy lynch两人也证明了CAP理论的正确性,虽然在后来近十年的时间很多人对CAP理论提出了很多异议,但是在NoSQL的世界中,它还是非常有参考价值的。它的意思是,一个分布式系统不能同时满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。
由于一致性、可用性和分区容忍性这三方面只能选择两个,所以大多数NoSQL系统都会根据自己的设计理念来进行相应的选择,但由于许多NoSQL数据库都以水平扩展著称,所以在CAP的选择上面,都倾向于坚持分区容忍性,而放弃一致性或者可用性,它们的做法主要是通过消减关系型和事务相关的功能。
具体分类下面的具体分类是来自于Visual Guide to NoSQL Systems一文,虽然对于这块分类我个人觉得还存在一些牵强的地方,比如将能支持多种CAP配置的Dynamo和其衍生产品Cassandra归类为AP,但是总体而言,这个分类还是相当不错,在现阶段非常具有参考价值,在每个相关的数据库后面还会介绍对应的数据模型。 图1. NoSQL产品分类图(参考1) 关注一致性和可用性的 (CA) 这些数据库对于分区容忍性方面比较不感冒,主要采用复制(Replication)这种方式来保证数据的安全性,常见的CA系统有:
关注一致性和分区容忍性的(CP) 这种系统将数据分布在多个网络分区的节点上,并保证这些数据的一致性,但是对于可用性的支持方面有问题,比如当集群出现问题的话,节点有可能因无法确保数据是一致性的而拒绝提供服务,主要的CP系统有:
关于可用性和分区容忍性的(AP) 这类系统主要以实现"最终一致性(Eventual Consistency)"来确保可用性和分区容忍性,AP的系统有:
在下一期云计算背后的秘密中,将重点给大家介绍我个人设计一款的NoSQL数据库,名为YunTable。
参考资料 | |
雁过留声
“云计算背后的秘密(6)-NoSQL数据库的综述”有21个回复
老吴在哪里高就啊,崇拜
不错的总结。
“并且由于它们在设计上和传统的NoSQL数据库相比有很大的不同,所以被统称为“NoSQL”系列数据库”
这句话是否有误?
to stefan:
呵呵,之前在IBM中国研究院,现在在准备创业中。
to aaron.chen:
的确bug
你的书《剖析云计算》在哪里有卖的啊?(当当没有)
to 李达:
现在在最后的编辑当中
IBM研究院? 在北京么?
to 加菲猫:
IBM中国研究院,主要在北京上地那边
楼主在讲到传统no sql数据库的时候能不能评论一下传统的key-value database比如berkley db
To Xin Qian:
由于对berkley db了解不是很深入,所以等将来有机会吧,我个人感觉BDB主要还是单机的:)
哪天能否去拜会一下老吴啊,当面学习一下,吸收营养!
BDB是巨经典的,站在巨人的肩膀上可以看得更远。这里是关于HA的用法http://www.oracle.com/technetwork/database/berkeleydb/overview/high-availability-099050.html
google的bigtable也许是BDB的发展,从二维到3维甚至多维。
google还有一个至强的地方在于IPC/RPC,云计算的关键之一是通讯。google的protocolbufffer可以看成是CORBA的发展
从google公开的protocol buffer的信息来看,并没有什么特别的地方。好的一点是这个东西是私有的,不用考虑兼容的问题,否则像corba那么复杂的东西,做一个能实用的基础设施都很困难。云计算公司,强的都是在后台,至于web之类,倒是简单多了。比如QQ这种上亿在线用户的管理,就是巨大的挑战。
to 冬瓜头:
你在上海吗?
我在北京
那天来上海,通知我一下:)
没问题,期待老吴当面醍醐灌顶啊!
老吴在上海啊,那我岂不是有机会可以当面学习? 我MSN:liuyuyangfoam@hotmail.com,有时间去徐家汇喝茶,我请客。
你若是6年前在IBM实习过,不见得要叫老吴,吴总很年轻有为的说,呵呵。我记得吴总是80后。
to 刘扬:
已经加了
to Will Chie:
呵呵,80后已经out了