2012年NOSQL學習筆記之二
ACID是如下單詞的首字母。
原子性Atomicity、
一緻性Consistency、
隔離性Isolation、
持久性Durability
ACID是傳統的關系型資料庫的特點。
C就是一緻性(Consistency),這個特點是關系型資料庫的靈魂(其他三個AID都是為其服務的),這個特性使得關系型資料庫可以用于幾乎所有對一緻性有要求的系統中,如典型的銀行系統。
這個一緻性很好了解,就是公司财務往銀行賬戶存了錢,老闆、客戶、銀行使用者不同人員,應該看到錢是一樣的。
在網頁應用中,尤其是SNS應用中,一緻性卻不是顯得那麼重要,使用者A看到的内容和使用者B同一個時刻點看到同一使用者C的内容是不一緻的,但是這個行為是可以容忍的,或者說,兩個人看到同一好友的資料更新的時間差那麼幾秒是可以容忍的,是以,關系型資料庫的最大特點在這裡已經無用武之地,起碼不是那麼重要了。
相反的,關系型資料庫為了維護一緻性所付出的巨大代價就是其讀寫性能比較差,而像微網誌,facebook這類SNS的應用,對并發讀寫能力要求極高,關系型資料庫已經無法應付(在讀方面,傳統上為了克服關系型資料庫缺陷,提高性能,都是增加一級memcache來靜态化網頁,而在SNS中,變化太快,memcache已經無能為力),是以,必須用新的一種資料結構化存儲來來代替關系資料庫。
關系資料庫的另一個特點就是其具有固定的表結構,是以,其擴充性極差,而在SNS中,系統的更新,功能的增加,往往意味着資料結構巨大改動,這一點關系型資料庫也難以應付,需要新的結構化資料存儲。
對于大型的SNS網站,每天使用者産生海量的使用者動态,以國外的Friendfeed為例,一個月就達到了2.5億條使用者動态,對于關系資料庫來說,在一張2.5億條記錄的表裡面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的使用者登入系統,例如騰訊,盛大,動辄數以億計的帳号,關系資料庫也很難應付。
在基于web的架構當中,資料庫是最難進行橫向擴充的,當一個應用系統的使用者量和通路量與日俱增的時候,你的資料庫卻沒有辦法像web
在上面提到的“三高”需求面前,關系資料庫遇到了難以克服的障礙。
對于web2.0網站來說,關系資料庫的很多主要特性卻往往無用武之地,例如:
對關系資料庫來說,插入一條資料之後立刻查詢,是肯定可以讀出來這條資料的,但是對于很多web應用來說,并不要求這麼高的實時性。
是以,關系資料庫在這些越來越多的應用場景下顯得不那麼合适了,為了解決這類問題的非關系資料庫應運而生。
資料庫裡面有一個很重要CAP理論。
CAP
C: Consistency一緻性
A: Availability可用性(指的是快速擷取資料)
P: Tolerance of network Partition分區容忍性(分布式)
10年前,Eric Brewer教授指出了著名的CAP理論,後來Seth
Gilbert 和 Nancy lynch兩人證明了CAP理論的正确性。CAP理論告訴我們,一個分布式系統不可能滿足一緻性,可用性和分區容錯性這三個需求,最多隻能同時滿足兩個。
熊掌與魚不可兼得也。關注的是一緻性,那麼您就需要處理因為系統不可用而導緻的寫操作失敗的情況,而如果您關注的是可用性,那麼您應該知道系統的read操作可能不能精确的讀取到write操作寫入的最新值。是以系統的關注點不同,相應的采用的政策也是不一樣的,隻有真正的了解了系統的需求,才有可能利用好CAP理論。
傳統資料庫遵循ACID,在CAP的C和A上有很嚴格的要求,是以P很難達到。比如說,在大規模資料條件下,擴充性和性能要求就受到了很大的限制。
此外資料庫還有一個很重要的BASE理論。
BASE
說起來很有趣,BASE的英文意義是堿,而ACID是酸。真的是水火不容啊。
Basically Availble --基本可用
Soft-state --軟狀态/柔性事務
"Soft state" 可以了解為"無連接配接"的,而
"Hard state"是"面向連接配接"的
Eventual Consistency --最終一緻性
最終一緻性,也是是 ACID的最終目的。
BASE模型正好和ACID模型相反,完全不同于ACID模型,BASE模型是以犧牲高一緻性,來獲得可用性或可靠性的。
Basically Available的含義是基本可用。支援分區失敗(e.g. sharding碎片劃分資料庫)。
Soft state軟狀态。軟狀态的含義是狀态可以有一段時間不同步,有一段時間是異步的。
Eventually consistent的含義是最終資料的效果是一緻的就可以了,而不代表時時都是一緻的。
BASE思想的主要實作有
1.按功能劃分資料庫
2.sharding碎片
BASE思想主要強調基本的可用性,如果你需要高可用性,也就是純粹的高性能,那麼就要以一緻性或容錯性為犧牲,BASE思想的方案在性能上還是有潛力可挖的。