Neio Notes Share knowledge and experience with you

3Dec/092

NoSQL小记

--Neio

我是在今年(2009年)夏天的“NoSQL”运动后(链接)才深入将Key-Value型存储方式引入现有的工作中的。早先对Google的Bigtable略有了解,知道其对数据存储思想的影响,但始终没有深入去了解它,所以现在也算是了去了一个遗憾。

我认为,NoSQL运动的意义并不是完全反对SQL,而是在于告诉被关系型数据库(RDBMS)这座宏伟的大山挡住视线的人们,SQL并非唯一的数据存储方式。也就是后来人们说的"Not Only SQL"——这一简短精辟的诠释"NoSQL"的短语。

目前我使用的Hypertable, HBase(HBase为参照使用),都是基于Bigtable模型的Key-Value型(更准确说是RowColumn型)分布式存储方式。选择它们,也是在于Bigtable盛名之下的缘故。

NoSQL运动中的模型并非Bigtable模型只此一家,而是如同春秋时期的诸子百家,整体呈现出了百家争鸣的局面。

Why NoSQL?

三个关键字:ACID, BASE, CAP

ACID是DBMS中强调的,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性 (Durability)。对于这四个名词不了解的,请参考维基百科对于ACID的描述。总体来说,ACID的目的就是通过事务支持,保证数据的完整性和正确性。

CAP: CAP是一个经验理论,由Brewer所提。三个字母分别是 Consistency, Availability 和 Partition Tolerance的缩写,分别可以翻译为一致性、有效性和网络分离容忍度。三个目标无法兼得,ACID在一致性和有效性卓有成效,而在Partition tolerance上的努力, 则非常艰难。而目前互联网应用情形下的海量数据,将单台计算机的处理能力压榨殆尽,单台计算机上的关系型数据库很难满足应用需求;而如果将关系型数据库的表分割存储在不同的计算机上,其有效性将很难保证。

于是乎,BASE被渐渐从记忆中挖掘出来,渐渐成为hot word。这个名词同样是Brewer所提。分别是英文:Basically Available, Soft-state, Eventual Consistency的缩写,正好与ACID这个缩写在字面上的意思相对应。这个理论认为,只需要满足Eventual Consistency(最终一致性)即可,而且可以是无连接的(Soft-state)。值得一提的是,eBay正是根据BASE的原理设计起架构。有兴趣的朋友可以参考《
BASE: An Acid Alternative》。

这三个名词与 NoSQL什么关系?

NoSQL做的,就是通过降低对数据一致性、完整性的要求,转而偏向于CAP中的A和P,通过增加Tolerance to network partition(P)的支持, 甚至与追求P来达到满足高并发的需求。而这背后,就需要BASE理论的支撑,才敢如此的放肆。因为放弃了对一致性的高要求,只需要满足BASE的Eventual Consistency, 也能最终达到一致。

后记

面向高并发的软件架构,特别是电子商务型的网站,更是要在CAP中三个度量中做取舍。核心的业务需要一致性的保证,偏向于用通过关系型数据库来保证,而一些对于一致性要求不高的数据,通过使用Key-Value型数据存储方式,又可以满足大量访问的要求。

ACID与BASE,这两个中和一下,不正是我们所需要的么? 所以, Why not NoSQL?

----------------------
PS. 文章在Draft停留了1个月,一直未完稿。始终还没调整好工作的节奏, 困于工作中啊。
----------------------