溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MVCC, ACID,BASIC 和Pasox的示例分析

發(fā)布時間:2021-11-16 14:22:45 來源:億速云 閱讀:109 作者:柒染 欄目:MySQL數(shù)據(jù)庫

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)MVCC, ACID,BASIC 和Pasox的示例分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

MVCCMulti-Version Concurrency Control 的縮寫,中文是多版本并發(fā)控制

簡單來說,MVCC的目的就是可以讓在不同的事物中任意修改鏡像,并通過比較版本號的形式來決定最新成功的事物。

但在現(xiàn)實(shí)中并不存在這樣的樂觀情況,比如說事物1修改了row1,事物修改了row1,事物1修改ROW2失敗。那么將回滾row1.但由于事物2已經(jīng)修改過row1,所以回滾的話,將導(dǎo)致事物2失效。所以純粹的MVCC的架構(gòu)并不適用于在數(shù)據(jù)庫中的設(shè)計(jì)。

 

通常來說在數(shù)據(jù)庫中的MVCC經(jīng)常表現(xiàn)為,查詢在同一個事物內(nèi),可以看到數(shù)據(jù)的是一致的,如果在事物進(jìn)行中,數(shù)據(jù)被另外的事物修改,則去讀取該數(shù)據(jù)的前鏡像數(shù)據(jù),不會因?yàn)槠渌说男薷亩兴淖儭?span lang="EN-US">

修改的過程依然是排他。而并非MVCC的樂觀鎖定。

 

ACID中的I的實(shí)現(xiàn)方法。

 

當(dāng)事物進(jìn)行修改數(shù)據(jù)時,在數(shù)據(jù)行中有隱藏的列,分別是ID,事物ID以及回滾前鏡像ID,以及。在行數(shù)據(jù)被修改的時候,原數(shù)據(jù)會被copy到回滾段中,當(dāng)前行的回滾前鏡像ID,設(shè)置為回滾段中的ID。

MYSQL 只會查找數(shù)據(jù)版本號早于當(dāng)前事物版本號的數(shù)據(jù)。所以當(dāng)一個事物開始時,有被修改的數(shù)據(jù),則會通過向前翻看回滾日志找到該數(shù)據(jù)的未修改改前的數(shù)值。

 

 

2PC

2PC 一般會有一個協(xié)調(diào)者進(jìn)行操作,首先協(xié)調(diào)者會對自己進(jìn)行寫日志。然后給所有參與者發(fā)送prepare消息,詢問包括自己在內(nèi)的全部人是否可以commit本次transaction,參與者會先對事物進(jìn)行預(yù)處理,如果可以提交,則會在自己身上寫入日志,并會發(fā)給協(xié)調(diào)者 ready信息,并且自身進(jìn)入可提交狀態(tài),如果不可提交則發(fā)送一個not commit的狀態(tài),同時撤銷更改。

協(xié)調(diào)者如果收到not commit,則會記入日志并發(fā)送abort 信號。所有參與者撤銷數(shù)據(jù)庫更改。

協(xié)調(diào)者如果收到全部參與者的ready消息,則會將commit寫入日志,并向所有參與者發(fā)送commit消息。如果收到所有的參與者消息,則會將食物提交 計(jì)入日志。

如果協(xié)調(diào)者遲遲未收到某些參與者的消息,則會認(rèn)為該參與者發(fā)送了vote_abort的信號,從而對其他參與者發(fā)送ABORT信號。

 

MySQL中其實(shí)有2種事物參與者,binlog ,redo log. 當(dāng)事物發(fā)起時,binlog先發(fā)送prepare,其實(shí)什么都不會做,然后innodb引擎發(fā)送prepare,將事物的狀態(tài)設(shè)置為TRX_PREPARED,開始刷新redo log到磁盤中。當(dāng)所有存儲引擎的prepare都成功,則將SQL語句寫入到binlog.如果事物回滾,則不會寫入bin log.最后調(diào)用存儲引擎的commit完成事物的提交,binlog_commit什么都不會做因?yàn)?span lang="EN-US">binlog已經(jīng)寫完了。Innodb commit 則會進(jìn)行刷redo log,清空undo的信息,將當(dāng)前事物設(shè)置為TRX_NOT_STARTED狀態(tài)

 

 

CAP

CAP 是指在分布式環(huán)境中的一致性,可用性和分區(qū)容災(zāi)性,而強(qiáng)行保留三項(xiàng)中的全部項(xiàng)會導(dǎo)致任意一項(xiàng)中的其他的兩項(xiàng)無法證明。

業(yè)內(nèi)通常的做法是犧牲一致性,但是即使?fàn)奚艘恢滦砸膊灰欢梢员WC可用性及分區(qū)容災(zāi)性,因?yàn)檫€有延遲的存在。

下面這一條總結(jié)的很好:

CAP 理論說在一個系統(tǒng)中對某個數(shù)據(jù)不存在一個算法同時滿足 Consistency, Availability, Partition-tolerance。注意,這里邊最重要和最容易被人忽視的是限定詞“對某個數(shù)據(jù)不存在一個算法”。這就是說在一個系統(tǒng)中,可以對某些數(shù)據(jù)做到 CP, 對另一些數(shù)據(jù)做到 AP,就算是對同一個數(shù)據(jù),調(diào)用者可以指定不同的算法,某些算法可以做到 CP,某些算法可以做到 AP。

 

BASE

BASEBasically availability ,soft state, eventually consistent三個短語的縮寫。

基于CAP理論,但核心思想是基于一致性與可用性進(jìn)行權(quán)衡的結(jié)果,根據(jù)需求不同來設(shè)定不同的計(jì)劃,如火車票系統(tǒng)與網(wǎng)購商品對一致性和可用性的要求就幾乎相反。所以即使在無法做到強(qiáng)一致性的前提下,但應(yīng)用可以根據(jù)自身特點(diǎn)采用適當(dāng)?shù)姆绞絹硎窍到y(tǒng)達(dá)到最終一致性。

1.Basically availability:

為了保障基本可用性,可以損失一部分性能,如搜索引擎出現(xiàn)故障時,可以從0.023秒的響應(yīng)時間增加到2秒,雖然慢了 但不會404.當(dāng)進(jìn)行網(wǎng)站商品促銷時,如果流量過大,為了保障功能可以用,消費(fèi)者可能會被引導(dǎo)到一個降級頁面。

2.soft state

指允許系統(tǒng)中數(shù)據(jù)存在中間狀態(tài),并認(rèn)為中間狀態(tài)的存在不會影響系統(tǒng)的整體可用性,這一點(diǎn)與CAP中的C概念完全相悖。即系統(tǒng)的數(shù)據(jù)在同步過程中允許存在延遲

3.eventually consistent

最終一致性的意思是在一段時間后,整個系統(tǒng)的數(shù)據(jù)全部副本會成為一致的狀態(tài),而不需要保證數(shù)據(jù)實(shí)時一致。

 

Base理論的是針對大型分布式系統(tǒng)的理論,數(shù)據(jù)無需保持實(shí)時一致,這與ACID中的強(qiáng)一致要求是不一致的,但ACID特性和BASE設(shè)計(jì)往往會參合在一起使用。

 

PASOX

Pasox分為basicmulti pasox.

 

Basic paxso主要是設(shè)計(jì)來如何解決在分布式環(huán)境下的唯一值問題。

在分布式環(huán)境中一般會多個proposer 和多個acceptor 

每個proposer發(fā)起的提議會以(ID,VALUE)來進(jìn)行標(biāo)識。

每個acceptor可以接受多個提議,當(dāng)多數(shù)的acceptor接受一項(xiàng)提議的時候,該提議被chosen。

在解決唯一值問題時其中有幾個基本原則:

1.P1原則,acceptor 接受他收到的第一個提議

2.P2原則如果一個值V被接受,那么后續(xù)只確定值為V的提議。

3.P2a原則,如果一項(xiàng)值為Vchosen,那么acceptor后續(xù)只接受值為V的提議。

4.P2b原則,如果一項(xiàng)值為V的提議被chosen,那么后續(xù)proposer值發(fā)起值為V的提議

5.P2c原則,對于提議(n,v),acceptor的多數(shù)派中,如果存在acceptor最近一次(ID最大)接受的提議值為V',那么要求V=V’,否則V可以為任意值。

假設(shè)有A~E 5acceptor,表示acceptor因宕機(jī)等原因缺席當(dāng)次決議,表示acceptor不接受提議,表示接受提議;多數(shù)派acceptor接受提議后提議被確定,以上表格對應(yīng)的決議過程如下:

第一輪,提議2為最先發(fā)起的提議,他可以發(fā)起任何值a.

第二輪,acceptor ABCE, ID5的提議因?yàn)闆]有任何值被接受,所以可以是任何值b.D缺席)

第三輪 ,acceptor BDE因?yàn)?span lang="EN-US">D接受了值a,所以ID14的提議根據(jù)P2原則,則必須提議值a.

第四輪,acceptor ACD 因?yàn)?span lang="EN-US">C接受了值b ,A,D 接受了值a ,根據(jù)P2c原則,值b的提議ID大于值a 所以ID27的提議必須為b.

第五輪, acceptor BCD,BCD,都接受過了提議,相比之下CD曾接受的27號提議ID最大,所以29輪的提議必須為b.

為了實(shí)現(xiàn)p2c ,acceptor需要保證1,記錄曾經(jīng)接受的最大的提議ID號以便proposer查詢以決定其提議值。2.在回應(yīng)ID n之后,需要保證不再接受ID小于n的提議。

上述就是小編為大家分享的MVCC, ACID,BASIC 和Pasox的示例分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI