本文作者:
Sigma
本文链接:
http://www.sigma.me/2011/06/13/NoSQL-CAP-Theorem.html
CAP理论是设计分布式web系统的一个很关键的定律,其主要内容是(非官方定义):
When
designing distributed web services, there are three properties that are
commonly desired: consistency, availability, and partition tolerance. It
is impossible to achieve all three.
中译为:
在设计分布式Web服务中,通常需要考虑三个应用的属性:一致性、可用性以及分区宽容性。但是在实际的设计中,不可能这三方面同时做的很好。
CAP理论的C就是一致性(Consistency),这里不多解释,想了解的可以看看我之前写过的一致性的一些东西
;A
就是可用性(availability),可以理解为是否可获取数据,以及获取数据的速度;P就是分区容忍度(partion
tolerance),指的是系统中的数据分布性的大小对系统的正确性,性能的影响(一定程度上就是可扩展性)。这个理论的主要意思就是这三个是不可以同
时做到很好的,我们在实现一个分布式系统时(包括分布式数据库),是不可能同时完美的实现三个方面。其实这个理论可以用“鱼和熊掌不可兼得”一言以蔽之。
CAP理论最早是在2000年7月19号,由Berkeley的Eric Brewer
教授在ACM PODC会议上的一个开题演讲中提出,PPT在此
。此后,MIT的Seth Gilbert
和Nancy Lynch
,理论上证明
了Brewer猜想是正确的,CAP理论在学术上正式作为一个定理出现了。
NoSQL
一定程度上就是基于这个理论提出来的,因为传统的SQL数据库(关系型数据库)都是都是具有ACID属性,对一致性要求很高,因此降低了
A(availability)和P(partion
tolerance),因此,为了提高系统性能和可扩展性,必须牺牲C(consistency),推翻关系型数据库中ACID这一套。
依据CAP理论,从应用的需求不同,我们对数据库(其实就是一种结构化数据存储,和Bolb恰好不同)时,可以从三方面考虑:
- 考虑CA,这就是传统上的关系型数据库(RMDB).
- 考虑CP,主要是一些Key-value数据库,典型代表为google的Big Table
- 考虑AP,主要是一些面向文档的适用于分布式系统的数据库,如SimpleDB。
而对大型网站尤其是SNS网站,对于数据的短期存储,可用性与分区容忍性优先级要高于数据一致性,一般会尽量朝着 A、P 的方向设计,而对于数据的持久存储,可以通过传统的SQL来保证一致性(最终一致性)。
CAP理论出现后,很多大规模的网站,尤其是SNS网站的数据库设计都利用其思想,包括Amazon,Facebook和Twitter这几个新兴的IT巨头,因此,一定程度上来讲,他们都是CAP的信徒。另一方面,他们从实践上证明了CAP理论的正确性。
最后,附上一张图片,可以形象的解释CAP理论(来源
)
更多内容,请看这篇介绍CAP理论的文章
,本文有些内容译自这里。
分享到:
相关推荐
NoSQL简介 NoSQL兴起的原因 NoSQL与关系数据库的比较 NoSQL的四大类型 NoSQL的三大基石 从NoSQL到NewSQL数据库
MongoDb是非关系型数据库的一种,它是一种基于分布式的文档型数据库。
Nosql非关系型数据库
《数据库原理与应用》(第3版)讲稿PPT
关系型数据库和非关系型数据库.pdf
10NoSQL非关系型数据库
通过HBase的应用实践,介绍其体系架构,以及传统关系型数据库和NOSQL数据库在应用设计方面需要考虑的问题。以实际应用案例为参考,关系型数据库和NOSQL在同类业务场景下的设计方案对比。
第19章 非关系型数据库—NoSQL.docx
redis是一款特殊的数据库软件,它是一款高性能的NOSQL系列的非关系型数据库。Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset...
本资料是在线教育课程第一天中使用的mongoDB的安装资料以及使用指南
Nosql非关系型数据库
详细介绍非关系型数据库,分类、架构、实例等,并对进行对比。
非关系数据库介绍,对于不了解非关系数据库NoSql的新手来说可以值得一看
关系型数据库与NoSQL数据库_张华强.pdf
Nosql非关系型数据库
关系型数据库与nosql数据库
Nosql非关系型数据库
NoSql Apache Cassandra 非关系型数据库
Nosql非关系型数据库
Nosql非关系型数据库