久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

共計(jì) 3147 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

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

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

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

但在現(xiàn)實(shí)中并不存在這樣的樂觀情況,比如說事物 1 修改了 row1,事物 2   修改了 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)為,查詢?cè)谕粋€(gè)事物內(nèi),可以看到數(shù)據(jù)的是一致的,如果在事物進(jìn)行中,數(shù)據(jù)被另外的事物修改,則去讀取該數(shù)據(jù)的前鏡像數(shù)據(jù),不會(huì)因?yàn)槠渌说男薷亩兴淖儭?/p>

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

 

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

 

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

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

 

 

2PC

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

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

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

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

 

在 MySQL 中其實(shí)有 2 種事物參與者,binlog ,redo log.  當(dāng)事物發(fā)起時(shí),binlog 先發(fā)送 prepare,其實(shí)什么都不會(huì)做,然后 innodb 引擎發(fā)送 prepare, 將事物的狀態(tài)設(shè)置為 TRX_PREPARED,開始刷新 redo log 到磁盤中。當(dāng)所有存儲(chǔ)引擎的 prepare 都成功,則將 SQL 語句寫入到 binlog. 如果事物回滾,則不會(huì)寫入 bin log. 最后調(diào)用存儲(chǔ)引擎的 commit 完成事物的提交,binlog_commit 什么都不會(huì)做因?yàn)?binlog 已經(jīng)寫完了。Innodb commit  則會(huì)進(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)會(huì)導(dǎo)致任意一項(xiàng)中的其他的兩項(xiàng)無法證明。

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

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

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

 

BASE:

BASE 是 Basically availability ,soft state, eventually consistent 三個(gè)短語的縮寫。

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

1.Basically availability:

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

2.soft state

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

3.eventually consistent

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

 

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

 

PASOX

Pasox 分為 basic 和 multi pasox.

 

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

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

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

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

在解決唯一值問題時(shí)其中有幾個(gè)基本原則:

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

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

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

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

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

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

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

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

第三輪  ,acceptor BDE 因?yàn)?D 接受了值 a,所以 ID 為 14 的提議根據(jù) P2 原則,則必須提議值 a.

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

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

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

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

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-19發(fā)表,共計(jì)3147字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 榆中县| 萍乡市| 仪征市| 顺昌县| 阳山县| 芦溪县| 怀远县| 文安县| 康乐县| 临朐县| 密云县| 交城县| 平武县| 中阳县| 休宁县| 内黄县| 祥云县| 永和县| 绍兴市| 宁阳县| 洪雅县| 梧州市| 阳新县| 连州市| 新乡县| 永泰县| 白城市| 沈阳市| 龙井市| 乌拉特后旗| 区。| 泸定县| 怀集县| 建始县| 临汾市| 忻城县| 交口县| 上蔡县| 萨迦县| 栖霞市| 宜君县|