真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

nosql中cap的含義,試述NoSQL中CAP理論的具體含義

什么是NoSQL數(shù)據(jù)庫?

2. 什么是NoSQL?

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了化州免費(fèi)建站歡迎大家使用!

2.1 NoSQL 概述

NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,

泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題,包括超大規(guī)模數(shù)據(jù)的存儲(chǔ)。

(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無需多余操作就可以橫向擴(kuò)展。

2.2 NoSQL代表

MongDB、 Redis、Memcache

3. 關(guān)系型數(shù)據(jù)庫與NoSQL的區(qū)別?

3.1 RDBMS

高度組織化結(jié)構(gòu)化數(shù)據(jù)

結(jié)構(gòu)化查詢語言(SQL)

數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中。

數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言

嚴(yán)格的一致性

基礎(chǔ)事務(wù)

ACID

關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則

事務(wù)在英文中是transaction,和現(xiàn)實(shí)世界中的交易很類似,它有如下四個(gè)特性:

A (Atomicity) 原子性

原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個(gè)操作失敗,整個(gè)事務(wù)就失敗,需要回滾。比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個(gè)步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會(huì)莫名其妙少了100元。

C (Consistency) 一致性

一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫原本的一致性約束。

I (Isolation) 獨(dú)立性

所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響,如果一個(gè)事務(wù)要訪問的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改,只要另外一個(gè)事務(wù)未提交,它所訪問的數(shù)據(jù)就不受未提交事務(wù)的影響。比如現(xiàn)有有個(gè)交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個(gè)交易還未完成的情況下,如果此時(shí)B查詢自己的賬戶,是看不到新增加的100元的

D (Durability) 持久性

持久性是指一旦事務(wù)提交后,它所做的修改將會(huì)永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機(jī)也不會(huì)丟失。

3.2 NoSQL

代表著不僅僅是SQL

沒有聲明性查詢語言

沒有預(yù)定義的模式

鍵 - 值對(duì)存儲(chǔ),列存儲(chǔ),文檔存儲(chǔ),圖形數(shù)據(jù)庫

最終一致性,而非ACID屬性

非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)

CAP定理

高性能,高可用性和可伸縮性

分布式數(shù)據(jù)庫中的CAP原理(了解)

CAP定理:

Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動(dòng)都是同步的

Availability(可用性), 好的響應(yīng)性能

Partition tolerance(分區(qū)容錯(cuò)性) 可靠性

P: 系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作。

定理:任何分布式系統(tǒng)只可同時(shí)滿足二點(diǎn),沒法三者兼顧。

CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,

因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:

CA - 單點(diǎn)集群,滿足一致性,可用性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大。

CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。

AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通常可能對(duì)一致性要求低一些。

CAP理論就是說在分布式存儲(chǔ)系統(tǒng)中,最多只能實(shí)現(xiàn)上面的兩點(diǎn)。

而由于當(dāng)前的網(wǎng)絡(luò)硬件肯定會(huì)出現(xiàn)延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實(shí)現(xiàn)的。

所以我們只能在一致性和可用性之間進(jìn)行權(quán)衡,沒有NoSQL系統(tǒng)能同時(shí)保證這三點(diǎn)。

說明:C:強(qiáng)一致性 A:高可用性 P:分布式容忍性

舉例:

CA:傳統(tǒng)Oracle數(shù)據(jù)庫

AP:大多數(shù)網(wǎng)站架構(gòu)的選擇

CP:Redis、Mongodb

注意:分布式架構(gòu)的時(shí)候必須做出取舍。

一致性和可用性之間取一個(gè)平衡。多余大多數(shù)web應(yīng)用,其實(shí)并不需要強(qiáng)一致性。

因此犧牲C換取P,這是目前分布式數(shù)據(jù)庫產(chǎn)品的方向。

4. 當(dāng)下NoSQL的經(jīng)典應(yīng)用

當(dāng)下的應(yīng)用是 SQL 與 NoSQL 一起使用的。

代表項(xiàng)目:阿里巴巴商品信息的存放。

去 IOE 化。

ps:I 是指 IBM 的小型機(jī),很貴的,好像好幾萬一臺(tái);O 是指 Oracle 數(shù)據(jù)庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲(chǔ)設(shè)備,也很貴的。

難點(diǎn):

數(shù)據(jù)類型多樣性。

數(shù)據(jù)源多樣性和變化重構(gòu)。

數(shù)據(jù)源改造而服務(wù)平臺(tái)不需要大面積重構(gòu)。

cap是什么意思譯?

1、n. 帽子;蓋子;頂;上限

2、vt. 超過;加蓋于;戴帽;覆蓋;完成;設(shè)限

3、vi. 脫帽致意

cap的用法

1、讀音

英 [k?p];美 [k?p]

2、例句

1)用作名詞 (n.)

The cap goes well with your suit.

這頂帽子跟你的衣服很相稱。

2)用作及物動(dòng)詞S+~+ n./pron.

The clouds capped the mountains.

云籠罩了山頂。

3、短語

cock one's cap 歪戴帽子

lift one's cap 舉帽致意

put on one's cap 戴帽

one's cap 舉帽致意

擴(kuò)展資料

同近義詞hat的用法

1、讀音

英 [h?t];美 [h?t]

2、短語

have one's hat on 戴著帽子

pull one's hat over one's eyes 用帽子遮住眼睛

put on a hat 戴上帽子

raise one's hat to (脫帽)向…致敬

3、區(qū)別

cap指無邊的便帽,表示職業(yè)的帽子,如運(yùn)動(dòng)帽、軍帽等。hat指有邊的帽子,尤指禮帽。

This hat becomes you.

這頂帽子你戴很合適。

CAP原則的與NoSQL的關(guān)系

傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在功能支持上通常很寬泛,從簡(jiǎn)單的鍵值查詢,到復(fù)雜的多表聯(lián)合查詢?cè)俚绞聞?wù)機(jī)制的支持。而與之不同的是,NoSQL系統(tǒng)通常注重性能和擴(kuò)展性,而非事務(wù)機(jī)制(事務(wù)就是強(qiáng)一致性的體現(xiàn)) 。傳統(tǒng)的SQL數(shù)據(jù)庫的事務(wù)通常都是支持ACID的強(qiáng)事務(wù)機(jī)制。A代表原子性,即在事務(wù)中執(zhí)行多個(gè)操作是原子性的,要么事務(wù)中的操作全部執(zhí)行,要么一個(gè)都不執(zhí)行;C代表一致性,即保證進(jìn)行事務(wù)的過程中整個(gè)數(shù)據(jù)加的狀態(tài)是一致的,不會(huì)出現(xiàn)數(shù)據(jù)花掉的情況;I代表隔離性,即兩個(gè)事務(wù)不會(huì)相互影響,覆蓋彼此數(shù)據(jù)等;D表示持久化,即事務(wù)一量完成,那么數(shù)據(jù)應(yīng)該是被寫到安全的,持久化存儲(chǔ)的設(shè)備上(比如磁盤)。NoSQL系統(tǒng)僅提供對(duì)行級(jí)別的原子性保證,也就是說同時(shí)對(duì)同一個(gè)Key下的數(shù)據(jù)進(jìn)行的兩個(gè)操作,在實(shí)際執(zhí)行的時(shí)候是會(huì)串行的執(zhí)行,保證了每一個(gè)Key-Value對(duì)不會(huì)被破壞。

關(guān)于NewSQL數(shù)據(jù)庫對(duì)于CAP的再解釋

作者 石默研

關(guān)于CAP的討論已經(jīng)很多,包括作者的另一篇文章“對(duì)CAP的初步解釋”,基本已經(jīng)即定思維的理解就是:分布式系統(tǒng)必須遵循CAP,一個(gè)分布式系統(tǒng)的設(shè)計(jì)只能同時(shí)滿足其中兩個(gè),不可能同時(shí)滿足;傳統(tǒng)關(guān)系數(shù)據(jù)庫選擇A與C,代表了互聯(lián)網(wǎng)新興技術(shù)的NoSQL數(shù)據(jù)庫則選擇A與P(或者C與P,雖然這種情況其實(shí)需要詳細(xì)討論)。

但是,近年來,新興的NewSQL數(shù)據(jù)庫(TiDB或者OceanBase),則是一種在分布式環(huán)境下,保證的ACID強(qiáng)事務(wù)特征的強(qiáng)一致性數(shù)據(jù)庫,并且很顯然,它同時(shí)也滿足了高可用性與優(yōu)秀的分區(qū)可容忍性(很好的可擴(kuò)展特性便是其一個(gè)層面的證明),似乎看起來,C、A、P都同時(shí)保證了,這不是違反了已經(jīng)經(jīng)過嚴(yán)格證明的CAP理論嗎?

這個(gè)問題初看起來,似乎是比較神奇,但仔細(xì)分析,其實(shí)答案是很明顯的。

首先,需要讀者區(qū)分“分布式”與CAP中所提到的分區(qū)可容忍性Paritition Tolerance并不是一回事。分區(qū)可容忍性P是指以下兩種分布式的情況:

. 同一份數(shù)據(jù)的多個(gè)副本的可分布性

. 有相互關(guān)聯(lián)的數(shù)據(jù)的可分布性(操作中表現(xiàn)為保證ACID的強(qiáng)分布式事務(wù))

即使是分庫分表,如果不存在以上兩種情況,只是獨(dú)立數(shù)據(jù)在同一個(gè)節(jié)點(diǎn)上的情況,雖然也是分布式,但跟CAP中的P沒有半毛錢關(guān)系。

那么,還是回到上面的問題,NewSQL數(shù)據(jù)庫,確實(shí)也是在保證了同一份數(shù)據(jù)多副本的強(qiáng)讀寫一致性、以及強(qiáng)分布式事務(wù)特性這樣的C的情況下,同時(shí)保證了A與P呀!事實(shí)確實(shí)如此,但這還是要仔細(xì)分析:

無論是TiDB,還是OceanBase,其在保證數(shù)據(jù)多副本的強(qiáng)一致性時(shí),都采用了Paxos協(xié)議或者Raft,它們簡(jiǎn)單來講就是多數(shù)選舉的原則,即寫不需要全部副本都完成,就能保證讀的強(qiáng)一致性,反過來也是一樣。因此,其在分布式情況下,保證數(shù)據(jù)讀寫強(qiáng)一致性的效率還是很高的,就是說,在同一個(gè)數(shù)據(jù)中心的網(wǎng)絡(luò)環(huán)境下,雖然這種分布可容忍性的滿足理論上講也會(huì)比單節(jié)點(diǎn)多一點(diǎn)點(diǎn)效率損失,但實(shí)際上是可以忽略不計(jì)的。但需要指出的是,在跨數(shù)據(jù)中心、跨城市的分布式情況下,如果要保證數(shù)據(jù)多副本的強(qiáng)一致性,即保證分區(qū)可容忍性,對(duì)效率(實(shí)際上是可用性A)的影響那還是不可忽略的。因此,在這種情況下,CAP理論依然成立。

再來看相互關(guān)聯(lián)數(shù)據(jù)的可分布性,這就涉及到了分布式事務(wù)。現(xiàn)有的NewSQL數(shù)據(jù)庫,即使在同一數(shù)據(jù)中心,為了保證強(qiáng)的分布式事務(wù),對(duì)效率的折衷都是不可忽略的,所謂的樂觀事務(wù),只是因?yàn)榭陀^問題本身沖突就少,并不改變沖突很多時(shí)效率明顯受影響的現(xiàn)實(shí)。因此,NewSQL數(shù)據(jù)庫雖然提供強(qiáng)分布式事務(wù)的能力,但在現(xiàn)實(shí)應(yīng)用中,都是提倡盡量避免大量的分布式事務(wù)出現(xiàn)。如果你所遇到的應(yīng)用場(chǎng)景是確實(shí)需要大量的分布式事務(wù)執(zhí)行,又不做應(yīng)用優(yōu)化全交給數(shù)據(jù)庫執(zhí)行,那么,現(xiàn)有的NewSQL分布式數(shù)據(jù)庫,依然會(huì)遇到明顯的性能問題,其實(shí)就是可用性A降低了。同學(xué)仔細(xì)去研究應(yīng)用中的實(shí)際情況就會(huì)發(fā)現(xiàn),很多互聯(lián)網(wǎng)應(yīng)用,當(dāng)其所需要的QPS很高很高,而對(duì)讀寫一致性與強(qiáng)分布式事務(wù)的要求又不那很高時(shí)候,其實(shí),NewSQL數(shù)據(jù)庫還是不能滿足他們的需求的,他們?nèi)匀恍枰鶕?jù)自己的情況改造或者選用NoSQL數(shù)據(jù)庫,這也是CAP理論并沒有被NewSQL打破的現(xiàn)實(shí)證明。

因此,總結(jié)來講,NewSQL數(shù)據(jù)庫,也是遵循CAP理論的,只不過,在同中心數(shù)據(jù)多副本情況下,保證P的同時(shí)對(duì)A的影響微乎其微;而在分布式事務(wù)的情況下,又采用了與應(yīng)用特性相關(guān)的策略(其實(shí)樂觀、悲觀事務(wù)本質(zhì)上就有根本應(yīng)用特性區(qū)分的意思)來保證性能而已。當(dāng)然,隨著網(wǎng)絡(luò)與計(jì)算機(jī)性能的提高,CAP三個(gè)特征中,保證其中兩個(gè),折衷另外一個(gè),所帶來的影響也會(huì)逐漸變小,但其理論依然是正確的。

CAP原則的簡(jiǎn)介

CAP原則是NOSQL數(shù)據(jù)庫的基石。Consistency(一致性)。 Availability(可用性)。Partition tolerance(分區(qū)容錯(cuò)性) 。

如何正確理解CAP理論

常見的理解及分析

目前流行的、對(duì)CAP理論解釋的情形是從同一數(shù)據(jù)在網(wǎng)絡(luò)環(huán)境中的多個(gè)副本出發(fā)的。為了保證數(shù)據(jù)不會(huì)丟失,在企業(yè)級(jí)的數(shù)據(jù)管理方案中,一般必須考慮數(shù)據(jù)的冗余存儲(chǔ)問題,而這應(yīng)該是通過在網(wǎng)絡(luò)上的其他獨(dú)立物理存儲(chǔ)節(jié)點(diǎn)上保留另一份、或多份數(shù)據(jù)副本來實(shí)現(xiàn)的(如附圖所示)。因?yàn)樵谕粋€(gè)存儲(chǔ)節(jié)點(diǎn)上的數(shù)據(jù)冗余明顯不能解決單點(diǎn)故障問題,這與通過多節(jié)點(diǎn)集群來提供更好的計(jì)算可用性的道理是相同的。

附圖 CAP理論示意圖

其實(shí),不用做嚴(yán)格的證明也可以想見,如附圖的情況,數(shù)據(jù)在節(jié)點(diǎn)A、B、C上保留了三份,如果對(duì)節(jié)點(diǎn)A上的數(shù)據(jù)進(jìn)行了修改,然后再讓客戶端通過網(wǎng)絡(luò)對(duì)該數(shù)據(jù)進(jìn)行讀取。那么,客戶端的讀取操作什么時(shí)候返回呢?

有這樣兩種情況:一種情況是要求節(jié)點(diǎn)A、B、C的三份數(shù)據(jù)完全一致后返回。也就是說,這時(shí)從任何一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)讀取的數(shù)據(jù)都是一樣的,這就是所謂的強(qiáng)一致性讀。很明顯,這時(shí)數(shù)據(jù)讀取的Latency要高一些(因?yàn)橐葦?shù)據(jù)在網(wǎng)絡(luò)中的復(fù)制),同時(shí)A、B、C三個(gè)節(jié)點(diǎn)中任何一個(gè)宕機(jī),都會(huì)導(dǎo)致數(shù)據(jù)不可用。也就是說,要保證強(qiáng)一致性,網(wǎng)絡(luò)中的副本越多,數(shù)據(jù)的可用性就越差;

另一種情況是,允許讀操作立即返回,容忍B節(jié)點(diǎn)的讀取與A節(jié)點(diǎn)的讀取不一致的情況發(fā)生。這樣一來,可用性顯然得到了提高,網(wǎng)絡(luò)中的副本也可以多一些,唯一得不到保證的是數(shù)據(jù)一致性。當(dāng)然,對(duì)寫操作同樣也有多個(gè)節(jié)點(diǎn)一致性的情況,在此不再贅述。

可以看出,上述對(duì)CAP理論的解釋主要是從網(wǎng)絡(luò)上多個(gè)節(jié)點(diǎn)之間的讀寫一致性出發(fā)考慮問題的。而這一點(diǎn),對(duì)于關(guān)系型數(shù)據(jù)庫意味著什么呢?當(dāng)然主要是指通常所說的Standby(關(guān)于分布式事務(wù),涉及到更多考慮,隨后討論)情況。對(duì)此,在實(shí)踐中我們大多已經(jīng)采取了弱一致性的異步延時(shí)同步方案,以提高可用性。這種情況并不存在關(guān)系型數(shù)據(jù)庫為保證C、A而放棄P的情況;而對(duì)海量數(shù)據(jù)管理的需求,關(guān)系型數(shù)據(jù)庫擴(kuò)展過程中所遇到的性能瓶頸,似乎也并不是CAP理論中所描述的那種原因造成的。那么,上述流行的說法中所描述的關(guān)系型數(shù)據(jù)庫為保證C、A而犧牲P到底是在指什么呢?

因此,如果根據(jù)現(xiàn)有的大多數(shù)資料對(duì)CAP理論的如上解釋,即只將其當(dāng)作分布式系統(tǒng)中多個(gè)數(shù)據(jù)副本之間的讀寫一致性問題的通用理論對(duì)待,那么就可以得出結(jié)論:CAP既適用于NoSQL數(shù)據(jù)庫,也適用于關(guān)系型數(shù)據(jù)庫。它是NoSQL數(shù)據(jù)庫、關(guān)系型數(shù)據(jù)庫,乃至一切分布式系統(tǒng)在設(shè)計(jì)數(shù)據(jù)多個(gè)副本之間讀寫一致性問題時(shí)需要遵循的共同原則。

更深入的探究:兩種重要的分布式場(chǎng)景

在本文中我們要說的重點(diǎn)與核心是:關(guān)于對(duì)CAP理論中一致性C的理解,除了上述數(shù)據(jù)副本之間的讀寫一致性以外,分布式環(huán)境中還有兩種非常重要的場(chǎng)景,如果不對(duì)它們進(jìn)行認(rèn)識(shí)與討論,就永遠(yuǎn)無法全面地理解CAP,當(dāng)然也就無法根據(jù)CAP做出正確的解釋。但可惜的是,目前為止卻很少有人提及這兩種場(chǎng)景:那就是事務(wù)與關(guān)聯(lián)。

先來看看分布式環(huán)境中的事務(wù)場(chǎng)景。我們知道,在關(guān)系型數(shù)據(jù)庫的事務(wù)操作遵循ACID原則,其中的一致性C,主要是指一個(gè)事務(wù)中相關(guān)聯(lián)的數(shù)據(jù)在事務(wù)操作結(jié)束后是一致的。所謂ACID原則,是指在寫入/異動(dòng)資料的過程中,為保證交易正確可靠所必須具備的四個(gè)特性:即原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨(dú)立性)和持久性(Durability)。

例如銀行的一個(gè)存款交易事務(wù),將導(dǎo)致交易流水表增加一條記錄。同時(shí),必須導(dǎo)致賬戶表余額發(fā)生變化,這兩個(gè)操作必須是一個(gè)事務(wù)中全部完成,保證相關(guān)數(shù)據(jù)的一致性。而前文解釋的CAP理論中的C是指對(duì)一個(gè)數(shù)據(jù)多個(gè)備份的讀寫一致性。表面上看,這兩者不是一回事,但實(shí)際上,卻是本質(zhì)基本相同的事物:數(shù)據(jù)請(qǐng)求會(huì)等待多個(gè)相關(guān)數(shù)據(jù)操作全部完成才返回。對(duì)分布式系統(tǒng)來講,這就是我們通常所說的分布式事務(wù)問題。

眾所周知,分布式事務(wù)一般采用兩階段提交策略來實(shí)現(xiàn),這是一個(gè)非常耗時(shí)的復(fù)雜過程,會(huì)嚴(yán)重影響系統(tǒng)效率,在實(shí)踐中我們盡量避免使用它。在實(shí)踐過程中,如果我們?yōu)榱藬U(kuò)展數(shù)據(jù)容量將數(shù)據(jù)分布式存儲(chǔ),而事務(wù)的要求又完全不能降低。那么,系統(tǒng)的可用性一定會(huì)大大降低,在現(xiàn)實(shí)中我們一般都采用對(duì)這些數(shù)據(jù)不分散存儲(chǔ)的策略。

當(dāng)然,我們也可以說,最常使用的關(guān)系型數(shù)據(jù)庫,因?yàn)檫@個(gè)原因,擴(kuò)展性(分區(qū)可容忍性P)受到了限制,這是完全符合CAP理論的。但同時(shí)我們應(yīng)該意識(shí)到,這對(duì)NoSQL數(shù)據(jù)庫也是一樣的。如果NoSQL數(shù)據(jù)庫也要求嚴(yán)格的分布式事務(wù)功能,情況并不會(huì)比關(guān)系型數(shù)據(jù)庫好多少。只是在NoSQL的設(shè)計(jì)中,我們往往會(huì)弱化甚至去除事務(wù)的功能,該問題才表現(xiàn)得不那么明顯而已。

因此,在擴(kuò)展性問題上,如果要說關(guān)系型數(shù)據(jù)庫是為了保證C、A而犧牲P,在盡量避免分布式事務(wù)這一點(diǎn)上來看,應(yīng)該是正確的。也就是說:關(guān)系型數(shù)據(jù)庫應(yīng)該具有強(qiáng)大的事務(wù)功能,如果分區(qū)擴(kuò)展,可用性就會(huì)降低;而NoSQL數(shù)據(jù)庫干脆弱化甚至去除了事務(wù)功能,因此,分區(qū)的可擴(kuò)展性就大大增加了。

再來看看分布式環(huán)境中的關(guān)聯(lián)場(chǎng)景。初看起來,關(guān)系型數(shù)據(jù)庫中常用的多表關(guān)聯(lián)操作與CAP理論就更加不沾邊了。但仔細(xì)考慮,也可以用它來解釋數(shù)據(jù)庫分區(qū)擴(kuò)展對(duì)關(guān)聯(lián)所帶來的影響。對(duì)一個(gè)數(shù)據(jù)庫來講,采用了分區(qū)擴(kuò)展策略來擴(kuò)充容量,數(shù)據(jù)分散存儲(chǔ)了,很顯然多表關(guān)聯(lián)的性能就會(huì)下降,因?yàn)槲覀儽仨氃诰W(wǎng)絡(luò)上進(jìn)行大量的數(shù)據(jù)遷移操作,這與CAP理論中數(shù)據(jù)副本之間的同步操作本質(zhì)上也是相同的。

因此,如果要保證系統(tǒng)的高可用性,需要同時(shí)實(shí)現(xiàn)強(qiáng)大的多表關(guān)系操作的關(guān)系型數(shù)據(jù)庫在分區(qū)可擴(kuò)展性上就遇到了極大的限制(即使是那些采用了各種優(yōu)秀解決方案的MPP架構(gòu)的關(guān)系型數(shù)據(jù)庫,如TeraData,Netezza等,其水平可擴(kuò)展性也是遠(yuǎn)遠(yuǎn)不如NoSQL數(shù)據(jù)庫的),而NoSQL數(shù)據(jù)庫則干脆在設(shè)計(jì)上弱化甚至去除了多表關(guān)聯(lián)操作。那么,從這一點(diǎn)上來理解“NoSQL數(shù)據(jù)庫是為了保證A與P,而犧牲C”的說法,也是可以講得通的。當(dāng)然,我們應(yīng)該理解,關(guān)聯(lián)問題在很多情況下不是并行處理的優(yōu)點(diǎn)所在,這在很大程度上與Amdahl定律相符合。

所以,從事務(wù)與關(guān)聯(lián)的角度來關(guān)系型數(shù)據(jù)庫的分區(qū)可擴(kuò)展性為什么受限的原因是最為清楚的。而NoSQL數(shù)據(jù)庫也正是因?yàn)槿趸?,甚至去除了像事?wù)與關(guān)聯(lián)(全面地講,其實(shí)還有索引等特性)等在分布式環(huán)境中會(huì)嚴(yán)重影響系統(tǒng)可用性的功能,才獲得了更好的水平可擴(kuò)展性。

那么,如果將事務(wù)與關(guān)聯(lián)也納入CAP理論中一致性C的范疇的話,問題就很清楚了:關(guān)于“關(guān)系型數(shù)據(jù)庫為了保證一致性C與可用性A,而不得不犧牲分區(qū)可容忍性P”的說法便是正確的了。但關(guān)于“NoSQL選擇了C與P,或者A與P”的說法則是錯(cuò)誤的,所有的NoSQL數(shù)據(jù)庫在設(shè)計(jì)策略的大方向上都是選擇了A與P(雖然對(duì)同一數(shù)據(jù)多個(gè)副本的讀寫一致性問題的設(shè)計(jì)各有不同),從來沒有完全選擇C與P的情況存在。

結(jié)論

現(xiàn)在看來,如果理解CAP理論只是指多個(gè)數(shù)據(jù)副本之間讀寫一致性的問題,那么它對(duì)關(guān)系型數(shù)據(jù)庫與NoSQL數(shù)據(jù)庫來講是完全一樣的,它只是運(yùn)行在分布式環(huán)境中的數(shù)據(jù)管理設(shè)施在設(shè)計(jì)讀寫一致性問題時(shí)需要遵循的一個(gè)原則而已,卻并不是NoSQL數(shù)據(jù)庫具有優(yōu)秀的水平可擴(kuò)展性的真正原因。而如果將CAP理論中的一致性C理解為讀寫一致性、事務(wù)與關(guān)聯(lián)操作的綜合,則可以認(rèn)為關(guān)系型數(shù)據(jù)庫選擇了C與A,而NoSQL數(shù)據(jù)庫則全都是選擇了A與P,但并沒有選擇C與P的情況存在。這才是用CAP理論來支持NoSQL數(shù)據(jù)庫設(shè)計(jì)正確認(rèn)識(shí)。

其實(shí),這種認(rèn)識(shí)正好與被廣泛認(rèn)同的NoSQL的另一個(gè)理論基礎(chǔ)相吻合,即與ACID對(duì)著干的BASE(基本可用性、軟狀態(tài)與最終一致性)。因?yàn)锽ASE的含義正好是指“NoSQL數(shù)據(jù)庫設(shè)計(jì)可以通過犧牲一定的數(shù)據(jù)一致性和容錯(cuò)性來換取高性能的保持甚至提高”,即NoSQL數(shù)據(jù)庫都應(yīng)該是犧牲C來換取P,而不是犧牲A??捎眯訟正好是所有NoSQL數(shù)據(jù)庫都普遍追求的特性。


網(wǎng)頁名稱:nosql中cap的含義,試述NoSQL中CAP理論的具體含義
文章地址:http://weahome.cn/article/dssgesj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部