常見的理解及分析
創(chuàng)新互聯(lián)專注于城步網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供城步營銷型網(wǎng)站建設,城步網(wǎng)站制作、城步網(wǎng)頁設計、城步網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務,打造城步網(wǎng)絡公司原創(chuàng)品牌,更為您提供城步網(wǎng)站排名全網(wǎng)營銷落地服務。
目前流行的、對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ù)多個備份的讀寫一致性。表面上看,這兩者不是一回事,但實際上,卻是本質基本相同的事物:數(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ù)副本之間的同步操作本質上也是相同的。
因此,如果要保證系統(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ù)庫都普遍追求的特性。
創(chuàng)建數(shù)據(jù)庫的五個屬性:比如學生表存學號,姓名、年齡、性別、班級等。
選擇開始菜單中→程序→【Management SQL Server 2008】→【SQL Server Management Studio】命令,打開【SQL Server Management Studio】窗口,并使用Windows或 SQL Server身份驗證建立連接。
在【對象資源管理器】窗口中展開服務器,然后選擇【數(shù)據(jù)庫】節(jié)點,右鍵單擊【數(shù)據(jù)庫】節(jié)點,從彈出來的快捷菜單中選擇【新建數(shù)據(jù)庫】命令。
非關系型數(shù)據(jù)庫:
隨著近些年技術方向的不斷拓展,大量的NoSql數(shù)據(jù)庫如MongoDB、Redis、Memcache出于簡化數(shù)據(jù)庫結構、避免冗余、影響性能的表連接、摒棄復雜分布式的目的被設計。
指的是分布式的、非關系型的、不保證遵循ACID原則的數(shù)據(jù)存儲系統(tǒng)。NoSQL數(shù)據(jù)庫技術與CAP理論、一致性哈希算法有密切關系。所謂CAP理論,簡單來說就是一個分布式系統(tǒng)不可能滿足可用性、一致性與分區(qū)容錯性這三個要求。
以上內容參考:百度百科-數(shù)據(jù)庫
數(shù)據(jù)庫主要分為關系數(shù)據(jù)庫和非關系型數(shù)據(jù)庫(NoSQL)。
1、關系數(shù)據(jù)庫
關系型數(shù)據(jù)庫,存儲的格式可以直觀地反映實體間的關系。關系型數(shù)據(jù)庫和常見的表格比較相似,關系型數(shù)據(jù)庫中表與表之間是有很多復雜的關聯(lián)關系的。
常見的關系型數(shù)據(jù)庫有Mysql,SqlServer等。在輕量或者小型的應用中,使用不同的關系型數(shù)據(jù)庫對系統(tǒng)的性能影響不大,但是在構建大型應用時,則需要根據(jù)應用的業(yè)務需求和性能需求,選擇合適的關系型數(shù)據(jù)庫。
2、非關系型數(shù)據(jù)庫(NoSQL)
指分布式的、非關系型的、不保證遵循ACID原則的數(shù)據(jù)存儲系統(tǒng)。NoSQL數(shù)據(jù)庫技術與CAP理論、一致性哈希算法有密切關系。NoSQL數(shù)據(jù)庫適合追求速度和可擴展性、業(yè)務多變的應用場景。
擴展資料
關系數(shù)據(jù)庫分為兩類:一類是桌面數(shù)據(jù)庫,例如Access、FoxPro和dBase等;另一類是客戶/服務器數(shù)據(jù)庫,例如SQL Server、Oracle和Sybase等。桌面數(shù)據(jù)庫用于小型的、單機的應用程序,它不需要網(wǎng)絡和服務器,實現(xiàn)起來比較方便,但它只提供數(shù)據(jù)的存取功能。
客戶/服務器數(shù)據(jù)庫主要適用于大型的、多用戶的數(shù)據(jù)庫管理系統(tǒng),應用程序包括兩部分:一部分駐留在客戶機上,用于向用戶顯示信息及實現(xiàn)與用戶的交互;另一部分駐留在服務器中,主要用來實現(xiàn)對數(shù)據(jù)庫的操作和對數(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ù)庫還是不能滿足他們的需求的,他們仍然需要根據(jù)自己的情況改造或者選用NoSQL數(shù)據(jù)庫,這也是CAP理論并沒有被NewSQL打破的現(xiàn)實證明。
因此,總結來講,NewSQL數(shù)據(jù)庫,也是遵循CAP理論的,只不過,在同中心數(shù)據(jù)多副本情況下,保證P的同時對A的影響微乎其微;而在分布式事務的情況下,又采用了與應用特性相關的策略(其實樂觀、悲觀事務本質上就有根本應用特性區(qū)分的意思)來保證性能而已。當然,隨著網(wǎng)絡與計算機性能的提高,CAP三個特征中,保證其中兩個,折衷另外一個,所帶來的影響也會逐漸變小,但其理論依然是正確的。
傳統(tǒng)的關系型數(shù)據(jù)庫在功能支持上通常很寬泛,從簡單的鍵值查詢,到復雜的多表聯(lián)合查詢再到事務機制的支持。而與之不同的是,NoSQL系統(tǒng)通常注重性能和擴展性,而非事務機制(事務就是強一致性的體現(xiàn)) 。傳統(tǒng)的SQL數(shù)據(jù)庫的事務通常都是支持ACID的強事務機制。A代表原子性,即在事務中執(zhí)行多個操作是原子性的,要么事務中的操作全部執(zhí)行,要么一個都不執(zhí)行;C代表一致性,即保證進行事務的過程中整個數(shù)據(jù)加的狀態(tài)是一致的,不會出現(xiàn)數(shù)據(jù)花掉的情況;I代表隔離性,即兩個事務不會相互影響,覆蓋彼此數(shù)據(jù)等;D表示持久化,即事務一量完成,那么數(shù)據(jù)應該是被寫到安全的,持久化存儲的設備上(比如磁盤)。NoSQL系統(tǒng)僅提供對行級別的原子性保證,也就是說同時對同一個Key下的數(shù)據(jù)進行的兩個操作,在實際執(zhí)行的時候是會串行的執(zhí)行,保證了每一個Key-Value對不會被破壞。
分享標題:nosql與cap的關系,簡述nosql中cap的含義
URL標題:http://www.chinadenli.net/article2/dscoiic.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站設計、網(wǎng)站排名、全網(wǎng)營銷推廣、品牌網(wǎng)站制作、建站公司
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)