本地事務和分散式事務的區別

mcxiaoracle發表於2022-06-24

1 事務

事務(Transaction)是訪問並可能更新資料庫中各種資料項的一個程式執行單元(unit)


2 事務的特性

原子性:指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。 


一致性:事務必須使資料庫從一個一致性狀態變換到另外一個一致性狀態。轉賬前和轉賬後的總金額不變。


隔離性:事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每一個使用者開啟的事務,不能被其他事務的運算元據所干擾,多個併發事務之間要相互隔離。


永續性:指一個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響

3.1 READ UNCOMMITTED: 贓讀、不可重複讀、虛讀都有可能發生。


3.2 READ COMMITTED: 避免贓讀。不可重複讀、虛讀都有可能發生。(oracle預設的)


3.3 REPEATABLE READ:避免贓讀、不可重複讀。虛讀有可能發生。(mysql預設)





MVCC



要說幻讀,首先要了解MVCC,MVCC叫做多版本併發控制,實際上就是儲存了資料在某個時間節點的快照。mvcc只在可重複讀隔離級別下才會產生.那麼mvcc是怎麼工作的呢



在讀提交隔離級別下:  每次讀都會生成讀檢視,這個時候去讀是可以實時讀到事務的變更資料的

 在可重複讀級別下:  只有第一次進行快照讀的時候會生成讀檢視,之後的所有的讀操作都會用的第一次生成的讀檢視.


MySQL:

   資料庫的資料被幹掉了,我們可以透過binlog來對資料進行恢復


3.5.2 Redo log

 MySQL引入了redo log,當做資料修改的時候,不僅在記憶體中操作,還會在redo log中記錄這次操作。當事務提交的時候,會將redo log日誌進行刷盤(redo log一部分在記憶體中,一部分在磁碟上)。當資料庫當機重啟的時候,會將redo log中的內容恢復到資料庫中,再根據undo log和binlog內容決定回滾資料還是提交資料


  其實寫redo log的時候,也會有buffer,是先寫buffer,再真正落到磁碟中的。至於從buffer什麼時候落磁碟,

會有配置供我們配置。

 Undo Log 是為了實現事務的原子性(事物裡的操作要麼都完成,要麼都不完成),在MySQL資料庫InnoDB儲存引擎中,還用Undo Log來實現多版本併發控制(簡稱:MVCC)。


為了滿足事務的原子性,在操作任何資料之前,首先將資料備份到一個地方(也就是Undo Log,undo日誌存放在共享表空間裡),然後進行資料的修改。如果出現了錯誤或者使用者執行了ROLLBACK語句,系統可以利用Undo Log中的備份將資料恢復到事務開始之前的狀態。除了可以保證事務的原子性,Undo Log也可以用來輔助完成事務的持久化(事務一旦完成,該事務對資料庫所做的所有修改都會持久的儲存到資料庫中)


二 分散式事物



分散式事務就是指事務的參與者、支援事務的伺服器、資源伺服器以及事務管理器分別位於不同的分散式系統的不同節點之上。以上是百度百科的解釋,簡單的說,就是一次大的操作由不同的小操作組成,這些小的操作分佈在不同的伺服器上,且屬於不同的應用,分散式事務需要保證這些小操作要麼全部成功,要麼全部失敗。本質上來說,分散式事務就是為了保證不同資料庫的資料一致性


CAP由Eric Brewer在2000年PODC會議上提出[1][2],是Eric Brewer在Inktomi[3]期間研發搜尋引擎、分散式web快取時得出的關於資料一致性(consistency)、服務可用性(availability)、分割槽容錯性(partition-tolerance)的猜想:


  (C) 資料一致性(consistency):也就是業務程式碼與資料庫操作的原子性


(A) 可用性(availability):所有讀寫請求在一定時間內得到響應,可終止、不會一直等待


  (P) 分割槽容錯性(partition-tolerance):多個可以進行負載均衡的節點














————————————————

推薦閱讀:

https://blog.csdn.net/worn_xiao/article/details/85224681






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2902745/,如需轉載,請註明出處,否則將追究法律責任。

相關文章