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的區別到底是什么的內容希望對大家有幫助。

相關推薦HOT
更多>>
Java9和Java11區別大嗎?
一、Java9和Java11區別Java 9的新特性java模塊系統 (Java Platform Module System)。模塊系統的使用:HTTP 2 客戶端:HTTP/2標準是HTTP協議的詳情>>
2023-10-11 23:00:28
合約機和裸機有哪些區別?
一、合約機和裸機的區別1、定義不同合約機指的是運營商為了吸引用戶而推出的優惠購機的活動,它需要用戶使用特定的套餐,并且套餐時間有限制,...詳情>>
2023-10-11 22:28:38
struts2和springmvc區別?
一、struts2和springmvc區別1.框架機制Struts2采用Filter(StrutsPrepareAndExecuteFilter)實現,SpringMVC(DispatcherServ詳情>>
2023-10-11 21:59:06
Java是什么?
一、什么是Java?首先Java是一種廣泛使用的計算機編程語言,程序員用它來和計算機交流,把要求和設想Java語言表達出來,這個過程就是我們所說的...詳情>>
2023-10-11 21:33:35