分布式領域CAP理論,

專注于為中小企業(yè)提供網(wǎng)站設計制作、網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)迎江免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動都是同步的
Availability(可用性), 好的響應性能
Partition tolerance(分區(qū)容錯性) 可靠性
定理:任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧。
忠告:架構師不要將精力浪費在如何設計能滿足三者的完美分布式系統(tǒng),而是應該進行取舍。
關系數(shù)據(jù)庫的ACID模型擁有 高一致性 + 可用性 很難進行分區(qū):
Atomicity原子性:一個事務中所有操作都必須全部完成,要么全部不完成。
Consistency一致性. 在事務開始或結束時,數(shù)據(jù)庫應該在一致狀態(tài)。
Isolation隔離層. 事務將假定只有它自己在操作數(shù)據(jù)庫,彼此不知曉。
Durability. 一旦事務完成,就不能返回。
跨數(shù)據(jù)庫事務:2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸縮模式的,JavaEE中的JTA事務可以支持2PC。因為2PC是反模式,盡量不要使用2PC,使用BASE來回避。
BASE模型反ACID模型,完全不同ACID模型,犧牲高一致性,獲得可用性或可靠性:
Basically Available基本可用。支持分區(qū)失敗(e.g. sharding碎片劃分數(shù)據(jù)庫)
Soft state軟狀態(tài) 狀態(tài)可以有一段時間不同步,異步。
Eventually consistent最終一致,最終數(shù)據(jù)是一致的就可以了,而不是時時高一致。
BASE思想的主要實現(xiàn)有
1.按功能劃分數(shù)據(jù)庫
2.sharding碎片
BASE思想主要強調(diào)基本的可用性,如果你需要High 可用性,也就是純粹的高性能,那么就要以一致性或容錯性為犧牲,BASE思想的方案在性能上還是有潛力可挖的。
現(xiàn)在NoSQL運動豐富了拓展了BASE思想,可按照具體情況定制特別方案,比如忽視一致性,獲得高可用性等等,NOSQL應該有下面兩個流派:
1. Key-Value存儲,如Amaze Dynamo等,可根據(jù)CAP三原則靈活選擇不同傾向的數(shù)據(jù)庫產(chǎn)品。
2. 領域模型 + 分布式緩存 + 存儲 (Qi4j和NoSQL運動),可根據(jù)CAP三原則結合自己項目定制靈活的分布式方案,難度高。
這兩者共同點:都是關系數(shù)據(jù)庫SQL以外的可選方案,邏輯隨著數(shù)據(jù)分布,任何模型都可以自己持久化,將數(shù)據(jù)處理和數(shù)據(jù)存儲分離,將讀和寫分離,存儲可以是異步或同步,取決于對一致性的要求程度。
不同點:NOSQL之類的Key-Value存儲產(chǎn)品是和關系數(shù)據(jù)庫頭碰頭的產(chǎn)品BOX,可以適合非Java如PHP RUBY等領域,是一種可以拿來就用的產(chǎn)品,而領域模型 + 分布式緩存 + 存儲是一種復雜的架構解決方案,不是產(chǎn)品,但這種方式更靈活,更應該是架構師必須掌握的。
常見的理解及分析
目前流行的、對CAP理論解釋的情形是從同一數(shù)據(jù)在網(wǎng)絡環(huán)境中的多個副本出發(fā)的。為了保證數(shù)據(jù)不會丟失,在企業(yè)級的數(shù)據(jù)管理方案中,一般必須考慮數(shù)據(jù)的冗余存儲問題,而這應該是通過在網(wǎng)絡上的其他獨立物理存儲節(jié)點上保留另一份、或多份數(shù)據(jù)副本來實現(xiàn)的(如附圖所示)。因為在同一個存儲節(jié)點上的數(shù)據(jù)冗余明顯不能解決單點故障問題,這與通過多節(jié)點集群來提供更好的計算可用性的道理是相同的。
附圖 CAP理論示意圖
其實,不用做嚴格的證明也可以想見,如附圖的情況,數(shù)據(jù)在節(jié)點A、B、C上保留了三份,如果對節(jié)點A上的數(shù)據(jù)進行了修改,然后再讓客戶端通過網(wǎng)絡對該數(shù)據(jù)進行讀取。那么,客戶端的讀取操作什么時候返回呢?
有這樣兩種情況:一種情況是要求節(jié)點A、B、C的三份數(shù)據(jù)完全一致后返回。也就是說,這時從任何一個網(wǎng)絡節(jié)點讀取的數(shù)據(jù)都是一樣的,這就是所謂的強一致性讀。很明顯,這時數(shù)據(jù)讀取的Latency要高一些(因為要等數(shù)據(jù)在網(wǎng)絡中的復制),同時A、B、C三個節(jié)點中任何一個宕機,都會導致數(shù)據(jù)不可用。也就是說,要保證強一致性,網(wǎng)絡中的副本越多,數(shù)據(jù)的可用性就越差;
另一種情況是,允許讀操作立即返回,容忍B節(jié)點的讀取與A節(jié)點的讀取不一致的情況發(fā)生。這樣一來,可用性顯然得到了提高,網(wǎng)絡中的副本也可以多一些,唯一得不到保證的是數(shù)據(jù)一致性。當然,對寫操作同樣也有多個節(jié)點一致性的情況,在此不再贅述。
可以看出,上述對CAP理論的解釋主要是從網(wǎng)絡上多個節(jié)點之間的讀寫一致性出發(fā)考慮問題的。而這一點,對于關系型數(shù)據(jù)庫意味著什么呢?當然主要是指通常所說的Standby(關于分布式事務,涉及到更多考慮,隨后討論)情況。對此,在實踐中我們大多已經(jīng)采取了弱一致性的異步延時同步方案,以提高可用性。這種情況并不存在關系型數(shù)據(jù)庫為保證C、A而放棄P的情況;而對海量數(shù)據(jù)管理的需求,關系型數(shù)據(jù)庫擴展過程中所遇到的性能瓶頸,似乎也并不是CAP理論中所描述的那種原因造成的。那么,上述流行的說法中所描述的關系型數(shù)據(jù)庫為保證C、A而犧牲P到底是在指什么呢?
因此,如果根據(jù)現(xiàn)有的大多數(shù)資料對CAP理論的如上解釋,即只將其當作分布式系統(tǒng)中多個數(shù)據(jù)副本之間的讀寫一致性問題的通用理論對待,那么就可以得出結論:CAP既適用于NoSQL數(shù)據(jù)庫,也適用于關系型數(shù)據(jù)庫。它是NoSQL數(shù)據(jù)庫、關系型數(shù)據(jù)庫,乃至一切分布式系統(tǒng)在設計數(shù)據(jù)多個副本之間讀寫一致性問題時需要遵循的共同原則。
更深入的探究:兩種重要的分布式場景
在本文中我們要說的重點與核心是:關于對CAP理論中一致性C的理解,除了上述數(shù)據(jù)副本之間的讀寫一致性以外,分布式環(huán)境中還有兩種非常重要的場景,如果不對它們進行認識與討論,就永遠無法全面地理解CAP,當然也就無法根據(jù)CAP做出正確的解釋。但可惜的是,目前為止卻很少有人提及這兩種場景:那就是事務與關聯(lián)。
先來看看分布式環(huán)境中的事務場景。我們知道,在關系型數(shù)據(jù)庫的事務操作遵循ACID原則,其中的一致性C,主要是指一個事務中相關聯(lián)的數(shù)據(jù)在事務操作結束后是一致的。所謂ACID原則,是指在寫入/異動資料的過程中,為保證交易正確可靠所必須具備的四個特性:即原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)和持久性(Durability)。
例如銀行的一個存款交易事務,將導致交易流水表增加一條記錄。同時,必須導致賬戶表余額發(fā)生變化,這兩個操作必須是一個事務中全部完成,保證相關數(shù)據(jù)的一致性。而前文解釋的CAP理論中的C是指對一個數(shù)據(jù)多個備份的讀寫一致性。表面上看,這兩者不是一回事,但實際上,卻是本質(zhì)基本相同的事物:數(shù)據(jù)請求會等待多個相關數(shù)據(jù)操作全部完成才返回。對分布式系統(tǒng)來講,這就是我們通常所說的分布式事務問題。
眾所周知,分布式事務一般采用兩階段提交策略來實現(xiàn),這是一個非常耗時的復雜過程,會嚴重影響系統(tǒng)效率,在實踐中我們盡量避免使用它。在實踐過程中,如果我們?yōu)榱藬U展數(shù)據(jù)容量將數(shù)據(jù)分布式存儲,而事務的要求又完全不能降低。那么,系統(tǒng)的可用性一定會大大降低,在現(xiàn)實中我們一般都采用對這些數(shù)據(jù)不分散存儲的策略。
當然,我們也可以說,最常使用的關系型數(shù)據(jù)庫,因為這個原因,擴展性(分區(qū)可容忍性P)受到了限制,這是完全符合CAP理論的。但同時我們應該意識到,這對NoSQL數(shù)據(jù)庫也是一樣的。如果NoSQL數(shù)據(jù)庫也要求嚴格的分布式事務功能,情況并不會比關系型數(shù)據(jù)庫好多少。只是在NoSQL的設計中,我們往往會弱化甚至去除事務的功能,該問題才表現(xiàn)得不那么明顯而已。
因此,在擴展性問題上,如果要說關系型數(shù)據(jù)庫是為了保證C、A而犧牲P,在盡量避免分布式事務這一點上來看,應該是正確的。也就是說:關系型數(shù)據(jù)庫應該具有強大的事務功能,如果分區(qū)擴展,可用性就會降低;而NoSQL數(shù)據(jù)庫干脆弱化甚至去除了事務功能,因此,分區(qū)的可擴展性就大大增加了。
再來看看分布式環(huán)境中的關聯(lián)場景。初看起來,關系型數(shù)據(jù)庫中常用的多表關聯(lián)操作與CAP理論就更加不沾邊了。但仔細考慮,也可以用它來解釋數(shù)據(jù)庫分區(qū)擴展對關聯(lián)所帶來的影響。對一個數(shù)據(jù)庫來講,采用了分區(qū)擴展策略來擴充容量,數(shù)據(jù)分散存儲了,很顯然多表關聯(lián)的性能就會下降,因為我們必須在網(wǎng)絡上進行大量的數(shù)據(jù)遷移操作,這與CAP理論中數(shù)據(jù)副本之間的同步操作本質(zhì)上也是相同的。
因此,如果要保證系統(tǒng)的高可用性,需要同時實現(xiàn)強大的多表關系操作的關系型數(shù)據(jù)庫在分區(qū)可擴展性上就遇到了極大的限制(即使是那些采用了各種優(yōu)秀解決方案的MPP架構的關系型數(shù)據(jù)庫,如TeraData,Netezza等,其水平可擴展性也是遠遠不如NoSQL數(shù)據(jù)庫的),而NoSQL數(shù)據(jù)庫則干脆在設計上弱化甚至去除了多表關聯(lián)操作。那么,從這一點上來理解“NoSQL數(shù)據(jù)庫是為了保證A與P,而犧牲C”的說法,也是可以講得通的。當然,我們應該理解,關聯(lián)問題在很多情況下不是并行處理的優(yōu)點所在,這在很大程度上與Amdahl定律相符合。
所以,從事務與關聯(lián)的角度來關系型數(shù)據(jù)庫的分區(qū)可擴展性為什么受限的原因是最為清楚的。而NoSQL數(shù)據(jù)庫也正是因為弱化,甚至去除了像事務與關聯(lián)(全面地講,其實還有索引等特性)等在分布式環(huán)境中會嚴重影響系統(tǒng)可用性的功能,才獲得了更好的水平可擴展性。
那么,如果將事務與關聯(lián)也納入CAP理論中一致性C的范疇的話,問題就很清楚了:關于“關系型數(shù)據(jù)庫為了保證一致性C與可用性A,而不得不犧牲分區(qū)可容忍性P”的說法便是正確的了。但關于“NoSQL選擇了C與P,或者A與P”的說法則是錯誤的,所有的NoSQL數(shù)據(jù)庫在設計策略的大方向上都是選擇了A與P(雖然對同一數(shù)據(jù)多個副本的讀寫一致性問題的設計各有不同),從來沒有完全選擇C與P的情況存在。
結論
現(xiàn)在看來,如果理解CAP理論只是指多個數(shù)據(jù)副本之間讀寫一致性的問題,那么它對關系型數(shù)據(jù)庫與NoSQL數(shù)據(jù)庫來講是完全一樣的,它只是運行在分布式環(huán)境中的數(shù)據(jù)管理設施在設計讀寫一致性問題時需要遵循的一個原則而已,卻并不是NoSQL數(shù)據(jù)庫具有優(yōu)秀的水平可擴展性的真正原因。而如果將CAP理論中的一致性C理解為讀寫一致性、事務與關聯(lián)操作的綜合,則可以認為關系型數(shù)據(jù)庫選擇了C與A,而NoSQL數(shù)據(jù)庫則全都是選擇了A與P,但并沒有選擇C與P的情況存在。這才是用CAP理論來支持NoSQL數(shù)據(jù)庫設計正確認識。
其實,這種認識正好與被廣泛認同的NoSQL的另一個理論基礎相吻合,即與ACID對著干的BASE(基本可用性、軟狀態(tài)與最終一致性)。因為BASE的含義正好是指“NoSQL數(shù)據(jù)庫設計可以通過犧牲一定的數(shù)據(jù)一致性和容錯性來換取高性能的保持甚至提高”,即NoSQL數(shù)據(jù)庫都應該是犧牲C來換取P,而不是犧牲A。可用性A正好是所有NoSQL數(shù)據(jù)庫都普遍追求的特性。
個人不認為nosql在少量數(shù)據(jù)存儲上有啥優(yōu)勢。nosql主要解決的是auto sharding的問題,你不需要sharding,搞啥nosql. 作者:方圓 鏈接:
2. 什么是NoSQL?
2.1 NoSQL 概述
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關系數(shù)據(jù)庫在應付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應用難題,包括超大規(guī)模數(shù)據(jù)的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴展。
2.2 NoSQL代表
MongDB、 Redis、Memcache
3. 關系型數(shù)據(jù)庫與NoSQL的區(qū)別?
3.1 RDBMS
高度組織化結構化數(shù)據(jù)
結構化查詢語言(SQL)
數(shù)據(jù)和關系都存儲在單獨的表中。
數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
嚴格的一致性
基礎事務
ACID
關系型數(shù)據(jù)庫遵循ACID規(guī)則
事務在英文中是transaction,和現(xiàn)實世界中的交易很類似,它有如下四個特性:
A (Atomicity) 原子性
原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務的運行不會改變數(shù)據(jù)庫原本的一致性約束。
I (Isolation) 獨立性
所謂的獨立性是指并發(fā)的事務之間不會互相影響,如果一個事務要訪問的數(shù)據(jù)正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數(shù)據(jù)就不受未提交事務的影響。比如現(xiàn)有有個交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事務提交后,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機也不會丟失。
3.2 NoSQL
代表著不僅僅是SQL
沒有聲明性查詢語言
沒有預定義的模式
鍵 - 值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫
最終一致性,而非ACID屬性
非結構化和不可預知的數(shù)據(jù)
CAP定理
高性能,高可用性和可伸縮性
分布式數(shù)據(jù)庫中的CAP原理(了解)
CAP定理:
Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動都是同步的
Availability(可用性), 好的響應性能
Partition tolerance(分區(qū)容錯性) 可靠性
P: 系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作。
定理:任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧。
CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求,
因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
CA - 單點集群,滿足一致性,可用性的系統(tǒng),通常在可擴展性上不太強大。
CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。
AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通常可能對一致性要求低一些。
CAP理論就是說在分布式存儲系統(tǒng)中,最多只能實現(xiàn)上面的兩點。
而由于當前的網(wǎng)絡硬件肯定會出現(xiàn)延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實現(xiàn)的。
所以我們只能在一致性和可用性之間進行權衡,沒有NoSQL系統(tǒng)能同時保證這三點。
說明:C:強一致性 A:高可用性 P:分布式容忍性
舉例:
CA:傳統(tǒng)Oracle數(shù)據(jù)庫
AP:大多數(shù)網(wǎng)站架構的選擇
CP:Redis、Mongodb
注意:分布式架構的時候必須做出取舍。
一致性和可用性之間取一個平衡。多余大多數(shù)web應用,其實并不需要強一致性。
因此犧牲C換取P,這是目前分布式數(shù)據(jù)庫產(chǎn)品的方向。
4. 當下NoSQL的經(jīng)典應用
當下的應用是 SQL 與 NoSQL 一起使用的。
代表項目:阿里巴巴商品信息的存放。
去 IOE 化。
ps:I 是指 IBM 的小型機,很貴的,好像好幾萬一臺;O 是指 Oracle 數(shù)據(jù)庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲設備,也很貴的。
難點:
數(shù)據(jù)類型多樣性。
數(shù)據(jù)源多樣性和變化重構。
數(shù)據(jù)源改造而服務平臺不需要大面積重構。
作者 石默研
關于CAP的討論已經(jīng)很多,包括作者的另一篇文章“對CAP的初步解釋”,基本已經(jīng)即定思維的理解就是:分布式系統(tǒng)必須遵循CAP,一個分布式系統(tǒng)的設計只能同時滿足其中兩個,不可能同時滿足;傳統(tǒng)關系數(shù)據(jù)庫選擇A與C,代表了互聯(lián)網(wǎng)新興技術的NoSQL數(shù)據(jù)庫則選擇A與P(或者C與P,雖然這種情況其實需要詳細討論)。
但是,近年來,新興的NewSQL數(shù)據(jù)庫(TiDB或者OceanBase),則是一種在分布式環(huán)境下,保證的ACID強事務特征的強一致性數(shù)據(jù)庫,并且很顯然,它同時也滿足了高可用性與優(yōu)秀的分區(qū)可容忍性(很好的可擴展特性便是其一個層面的證明),似乎看起來,C、A、P都同時保證了,這不是違反了已經(jīng)經(jīng)過嚴格證明的CAP理論嗎?
這個問題初看起來,似乎是比較神奇,但仔細分析,其實答案是很明顯的。
首先,需要讀者區(qū)分“分布式”與CAP中所提到的分區(qū)可容忍性Paritition Tolerance并不是一回事。分區(qū)可容忍性P是指以下兩種分布式的情況:
. 同一份數(shù)據(jù)的多個副本的可分布性
. 有相互關聯(lián)的數(shù)據(jù)的可分布性(操作中表現(xiàn)為保證ACID的強分布式事務)
即使是分庫分表,如果不存在以上兩種情況,只是獨立數(shù)據(jù)在同一個節(jié)點上的情況,雖然也是分布式,但跟CAP中的P沒有半毛錢關系。
那么,還是回到上面的問題,NewSQL數(shù)據(jù)庫,確實也是在保證了同一份數(shù)據(jù)多副本的強讀寫一致性、以及強分布式事務特性這樣的C的情況下,同時保證了A與P呀!事實確實如此,但這還是要仔細分析:
無論是TiDB,還是OceanBase,其在保證數(shù)據(jù)多副本的強一致性時,都采用了Paxos協(xié)議或者Raft,它們簡單來講就是多數(shù)選舉的原則,即寫不需要全部副本都完成,就能保證讀的強一致性,反過來也是一樣。因此,其在分布式情況下,保證數(shù)據(jù)讀寫強一致性的效率還是很高的,就是說,在同一個數(shù)據(jù)中心的網(wǎng)絡環(huán)境下,雖然這種分布可容忍性的滿足理論上講也會比單節(jié)點多一點點效率損失,但實際上是可以忽略不計的。但需要指出的是,在跨數(shù)據(jù)中心、跨城市的分布式情況下,如果要保證數(shù)據(jù)多副本的強一致性,即保證分區(qū)可容忍性,對效率(實際上是可用性A)的影響那還是不可忽略的。因此,在這種情況下,CAP理論依然成立。
再來看相互關聯(lián)數(shù)據(jù)的可分布性,這就涉及到了分布式事務。現(xiàn)有的NewSQL數(shù)據(jù)庫,即使在同一數(shù)據(jù)中心,為了保證強的分布式事務,對效率的折衷都是不可忽略的,所謂的樂觀事務,只是因為客觀問題本身沖突就少,并不改變沖突很多時效率明顯受影響的現(xiàn)實。因此,NewSQL數(shù)據(jù)庫雖然提供強分布式事務的能力,但在現(xiàn)實應用中,都是提倡盡量避免大量的分布式事務出現(xiàn)。如果你所遇到的應用場景是確實需要大量的分布式事務執(zhí)行,又不做應用優(yōu)化全交給數(shù)據(jù)庫執(zhí)行,那么,現(xiàn)有的NewSQL分布式數(shù)據(jù)庫,依然會遇到明顯的性能問題,其實就是可用性A降低了。同學仔細去研究應用中的實際情況就會發(fā)現(xiàn),很多互聯(lián)網(wǎng)應用,當其所需要的QPS很高很高,而對讀寫一致性與強分布式事務的要求又不那很高時候,其實,NewSQL數(shù)據(jù)庫還是不能滿足他們的需求的,他們?nèi)匀恍枰鶕?jù)自己的情況改造或者選用NoSQL數(shù)據(jù)庫,這也是CAP理論并沒有被NewSQL打破的現(xiàn)實證明。
因此,總結來講,NewSQL數(shù)據(jù)庫,也是遵循CAP理論的,只不過,在同中心數(shù)據(jù)多副本情況下,保證P的同時對A的影響微乎其微;而在分布式事務的情況下,又采用了與應用特性相關的策略(其實樂觀、悲觀事務本質(zhì)上就有根本應用特性區(qū)分的意思)來保證性能而已。當然,隨著網(wǎng)絡與計算機性能的提高,CAP三個特征中,保證其中兩個,折衷另外一個,所帶來的影響也會逐漸變小,但其理論依然是正確的。
Apache三劍客:HBase, Cassandra, CouchDB。HBase的前景最為看好,因為它的開發(fā)者眾多并且都是頂尖高手。Cassandra目前有很多否定的聲音。CouchDB的小而精悍,贊譽很多,將要正式發(fā)布的CouchBase融合了MemBase和CouchDB,很令人期待。
HBase和Cassandra都是效仿Google的BigTable的基于列的數(shù)據(jù)庫,它們都是用Java寫的。另外一類似的數(shù)據(jù)庫是HyperTable,百度用在一些后臺分析,因為它是C++寫的,速度比較快。不過HyperTable有點邊緣,不太流行。這些基于列的開源數(shù)據(jù)庫目前都比Goolge的BigTable差之少一個數(shù)量級
CouchDB是一個文檔數(shù)據(jù)庫。其最大的競爭者是MongoDB。MongoDB和HBase都采用主從服務器設計。CouchDB的服務器分布設計和Cassandra類似,Peer to Peer類型的。主從服務器設計一般能更好的strong consistent,屬于CAP理論中的CP類型。 CouchDB和Cassandra一般認為都是eventual consistent,屬于CAP理論中的AP類型。但其實MongoDB和Cassandra都可以設置成strong consistent或者eventual consistent。
以上所提到的數(shù)據(jù)庫都支持MapReduce。好像出了HyperTable都支持非主鍵索引。HBase和strong consistent配置的MongoDB都支持最基本的鎖定(HBase單行鎖定,MongoDB單文檔鎖定),因此可以實現(xiàn)transaction,但是實現(xiàn)有點復雜和低效。單就transaction這一點,目前開源NoSQL數(shù)據(jù)庫沒有做的比較好的。
MongoDB的最大賣點是不需構建非主鍵索引也能執(zhí)行很多查詢。但是MongoDB的服務器分布設計實在不能讓人恭維,可以說是NoSQL數(shù)據(jù)庫中最Ugly的實現(xiàn)。
K-V數(shù)據(jù)庫比較多,而且上面提到的基于列的數(shù)據(jù)庫和文檔數(shù)據(jù)庫其實也都是K-V數(shù)據(jù)庫。比較流行的純種K-V數(shù)據(jù)庫有:
Memcached: 非常流行,不支持持久化
VMWare's Redis: 很流行,新浪和知乎都在用,CP類型。
MemBase: 由很多Memcached的開發(fā)者開發(fā),使用sqlite作底層存儲。在社交游戲中用的比較多, zynga在用,CP類型。
Riak, 分布式實現(xiàn)和CouchDB/Cassandra比較像,AP類型。支持MapReduce。
Linkin's Voldemort, 在K-V中少見的eventual consistent ,AP類型。
TT, TC
純基于二維座標索引的是Neo4j。但是現(xiàn)在MongoDB和CouchDB都集成這一特性。
目前CouchDB的開發(fā)者成立的公司CouchOne收購了MemBase,將其底層sqlite換成CouchDB推出了CouchBase,從而引入MapReduce以支持非主鍵索引。CouchBase暫時還沒有正式發(fā)布官方正式版,不過快了。雖然CouchDB是eventual consistent的,但是CouchBase的開發(fā)者宣稱CouchBase保持了MemBase的strong consistent特性,具體實現(xiàn)有待以后研究。
如果從成熟的角度來看,比較成熟并且十分流行的的有CouchDB,Memcached,Redis。
HBase和MongonDB和Cassandra都比較新,處于頻繁更新之中。最有前途的是HBase,但是Hadoop/HBase集群的維護常常需要很多專業(yè)人員并且需要構建一個比較大的集群才能最大化體現(xiàn)出威力,因此用戶主要是Facebook, yahoo, 百度和阿里巴巴等大公司。
個人比較期待CouchBase。
轉(zhuǎn)載僅供參考,版權屬于原作者。祝你愉快,滿意請采納哦
文章名稱:CAP理論是NoSql,cap理論是分布式領域的重要理論
瀏覽地址:http://chinadenli.net/article3/dsgogos.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站改版、網(wǎng)站設計、虛擬主機、電子商務、手機網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)