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