2pc和3pc的區別到底是什么?
一、2pc和3pc的區別
1.3pc比2pc多了一個can commit階段,減少了不必要的資源浪費。因為2pc在名列前茅階段會占用資源,而3pc在這個階段不占用資源,只是校驗一下sql,如果不能執行,就直接返回,減少了資源占用。
2.引入超時機制。同時在協調者和參與者中都引入超時機制。
2pc:只有協調者有超時機制,超時后,發送回滾指令。
3pc:協調者和參與者都有超時機制。
協調者超時: can commit,pre commit中,如果收不到參與者的反饋,則協調者向參與者發送中斷指令。
參與者超時: pre commit階段,參與者進行中斷; do commit階段,參與者進行提交。
兩階段提交(2PC)
兩階段提交又稱2PC(two-phase commit protocol),2pc是一個非常經典的強一致、中心化的原子提交協議。這里所說的中心化是指協議中有兩類節點:一個是中心化協調者節點(coordinator)和N個參與者節點(partcipant)。
三階段提交(3PC)
三階段提交又稱3PC,其在兩階段提交的基礎上增加了CanCommit階段,并引入了超時機制。一旦事務參與者遲遲沒有收到協調者的Commit請求,就會自動進行本地commit,這樣相對有效地解決了協調者單點故障的問題。
延伸閱讀:
二、事務的基本概念
就是一個程序執行單元,里面的操作要么全部執行成功,要么全部執行失敗,不允許只成功一半另外一半執行失敗的事情發生。例如一段事務代碼做了兩次數據庫更新操作,那么這兩次數據庫操作要么全部執行成功,要么全部回滾。
事務有4個非常重要的特性,即我們常說的(ACID)。
Atomicity(原子性):是說事務是一個不可分割的整體,所有操作要么全做,要么全不做;只要事務中有一個操作出錯,回滾到事務開始前的狀態的話,那么之前已經執行的所有操作都是無效的,都應該回滾到開始前的狀態。
Consistency(一致性):是說事務執行前后,數據從一個狀態到另一個狀態必須是一致的,比如A向B轉賬( A、B的總金額就是一個一致性狀態),不可能出現A扣了錢,B卻沒收到的情況發生。
Isolation(隔離性): 多個并發事務之間相互隔離,不能互相干擾。關于事務的隔離性,可能不是特別好理解,這里的并發事務是指兩個事務操作了同一份數據的情況;而對于并發事務操作同一份數據的隔離性問題,則是要求不能出現臟讀、幻讀的情況,即事務A不能讀取事務B還沒有提交的數據,或者在事務A讀取數據進行更新操作時,不允許事務B率先更新掉這條數據。而為了解決這個問題,常用的手段就是加鎖了,對于數據庫來說就是通過數據庫的相關鎖機制來保證。
Durablity(持久性):事務完成后,對數據庫的更改是永久保存的,不能回滾。
以上就是關于2pc和3pc的區別到底是什么的內容希望對大家有幫助。

猜你喜歡LIKE
相關推薦HOT
更多>>
Concurrent Programming, Parallel Programming 的本質區別是什么?
一、Concurrent Programming, Parallel Programming 的本質區別略有交叉,各有不同。Parallel Programming強調如何在多于1個CPU等情況下對系詳情>>
2023-10-13 23:11:46
簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?
一、簡單工廠模式、工廠方法模式和抽象工廠模式的區別簡單工廠模式簡單工模式時類的創建模式,又叫做靜態工廠方法(static Factory Method)。...詳情>>
2023-10-13 21:42:32
聚類和降維有什么區別與聯系?
一、聚類和降維的區別與聯系區別降維就是復雜的高維數據信息簡化為更容易閱讀的低維數據信息,就像素描把三維的立體圖形繪制在二維的平面上,而...詳情>>
2023-10-13 20:26:02
OC中協議和多態有什么區別?
一、OC中協議和多態的區別在Objective-C中,協議(Protocol)和多態(Polymorphism)是兩個不同的概念,它們的區別如下:協議(Protocol):協...詳情>>
2023-10-13 20:01:13熱門推薦
大家都在用的Mpp數據庫有哪些?
沸Concurrent Programming, Parallel Programming 的本質區別是什么?
熱lua編譯器和lua解釋器有什么區別?
熱怎么自定義Visual Studio代碼折疊識別的區域?
新4核4線程和4核8線程區別?
簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?
Spark 和 Hadoop 有什么區別?
cs和bs區別?
axios和ajax區別?
ar模型和ma模型的區別?
聚類和降維有什么區別與聯系?
DOF和HP有什么區別?
OC中協議和多態有什么區別?
SAS 9.0中,class指令跟by指令有哪些區別?
技術干貨






