NoSQL學習筆記(一)之概述

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章