1.综述
Nosql数据库是一个对于传统sql数据库的一种挑战,由于现在企业和互联网应用数据量的膨胀,sql已经不能支持这样的海量数据的分布式存储和高速读写,所以Nosql应运而生。Nosql通过key-value这样一种简单高效的数据存储方式提高了数据库性能。
2.理论
CAP,BASE和最终一致性是Nosql数据库存在的三大基石。下面详细的说说这3个理论。
2.1CAP理论
C:Consistency 一致性(对于多用户,读写的数据变动同步)
P: Tolerance of networkPartition 分区容错性(分布式可靠性)
CAP理论是由Eric Brewer教授提出的,CAP理论的核心是:一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。
详见:http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
2.2BASE理论
BasicallyAvailble 基本可用(支持分区失败)
Soft-state 软状态/柔性事务(无状态连接,支持异步)
Eventual Consistency 最终一致性(不要求高一致性,只要求最终能够一致)
BASE理论的核心是:牺牲高一致性,获得可用性或可靠性
详见:http://www.jdon.com/jivejdon/thread/37625
2.3最终一致性理论
(1)强一致性
强一致性(即时一致性)假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读取操作都将返回最新值
(2)弱一致性
假如A先写入了一个值到存储系统,存储系统不能保证后续A,C的读取操作能读取到最新值。此种情况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操作A,C读取到最新值这一段时间。
(3)最终一致性
最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如果在A,C后续读取之前没有其它写操作更新同样的值的话,最终所有的读取操作都会读取到最A写入的最新值。此种情况下,如果没有失败发生的话,“不一致性窗口”的大小依赖于以下的几个因素:交互延迟,系统的负载,以及复制技术中replica的个数(这个可以理解为master/salve模式中,salve的个数),最终一致性方面最出名的系统可以说是 DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。
详见:http://www.allthingsdistributed.com/2008/12/eventually_consistent.html
3.技术
3.1分布式存储
(1)Master/Slave
优点:成熟稳定
缺点:写操作单点故障,slave延迟
(2)Multi-master
优点:多master解决单点故障
缺点:不易实现一致性
(3)Two phase commit
优点:简单的一致性算法
缺点:无容错
(4)Three phase commit
优点:允许发生单点故障后达成一致。
详见:http://sebug.net/paper/databases/nosql/Nosql.html#_08464202471077442_91161458194
3.2一致性hash
一致性hash是一种巧妙的hash算法,在解决分布式系统负载均衡问题上很有效。
详见:http://www.cnblogs.com/leoo2sk/archive/2011/08/11/consistent-hashing-intro.html
3.3Quorum NRW
N: 复制的节点数量
R: 成功读操作的最小节点数
W: 成功写操作的最小节点数
W + R > N,强一致性
W + R <=N,最终一致性
详见:http://sebug.net/paper/databases/nosql/Nosql.html#NRW_012323816604251636_2127662_10272764961707637
3.4Vector Clock
对于W=1 R=N的情况,会出现复杂的合并问题。此时可以通过Vector Clock方式解决。如果系统不需要很大弹性,W=N可以简化设计。
详见:http://en.wikipedia.org/wiki/Vector_clock
3.5Gossip
病毒式传播方式,每个节点保持一个Vector Clock和一个state version tree,目前正在被Cassandra使用。
详见:
http://sebug.net/paper/databases/nosql/Nosql.html#gossip_34187653195112944_16061_08507828080528557
4.主流Nosql产品
(1)Big Table(Google)
(2)Dyname(Amazon)
(3)HBase(Apache)
(4)Cassandra(Facebook)
(5)CouchDB(Apache)
(6)MongoDB
(7)Redis
(8)Riak
原文链接:https://www.f2er.com/nosql/204450.html