NoSQL(一)概述

来源:互联网 发布:淘宝页面背景图片素材 编辑:程序博客网 时间:2024/05/16 02:58

1.综述     

NoSQL数据库是一个对于传统SQL数据库的一种挑战,由于现在企业和互联网应用数据量的膨胀,SQL已经不能支持这样的海量数据的分布式存储和高速读写,所以NoSQL应运而生。NoSQL通过key-value这样一种简单高效的数据存储方式提高了数据库性能。

2.理论

CAP,BASE和最终一致性是NoSQL数据库存在的三大基石。下面详细的说说这3个理论。

2.1CAP理论

C: Consistency 一致性(对于多用户,读写的数据变动同步)

A: Availability 可用性(快速获取数据)

P: Tolerance of network Partition 分区容错性(分布式可靠性)

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,B,C的读取操作能读取到最新值。此种情况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操作A,B,C读取到最新值这一段时间。

(3)最终一致性

最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如果在A,B,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


原创粉丝点击