分布式事務
事務:其實乙個sql就是乙個事務。我們要控制的事務是乙個連線作為乙個事務。
connection con = datasource.getconnection;
con.setautocommit(false);//關閉自動提交,將乙個連線作為乙個事務開啟事務。否則乙個sql作為乙個事務
statement statement = con.createstatement();
statement.excute("sql");
con.commit();//無異常提交
con.rollback();//存在因此常回滾
程式設計式事務:**侵入性高,**重複性大
宣告式事務註解:利用註解的方式採用aop,完成事務的控制。
本質上都是控制連線,將乙個連線作為乙個事務無異常提交,有異常回滾
支援當前事務:
不支援當前事務:
其他讀未提交,讀已提交,可重複讀(mysql),序列化
acid
原子性atomicity、一致性、隔離性、永續性(durability)
undo log 邏輯日誌
undo log 是為了實現事務的原子性,在mysql資料庫innodb儲存引擎中,還用undo log來實現多版本併發控制(簡稱:mvcc)。
原理
undo log的原理很簡單,為了滿足事務的原子性,在操作任何資料之前,首先將資料備份到乙個地方(這個儲存資料備份的地方稱為undo log)。然後進行資料的修改。如果出現了錯誤或者使用者執行了rollback語句,系統可以利用undo log中的備份將資料恢復到事務開始之前的狀態。
redolog
為了能夠將資料快取一段時間,就能減少io提高效能。但是這樣就會喪失事務的永續性。因此引入了另外一
種機制來實現持久化,即redo log.,邏輯日誌加物理日誌
原理
和undo log相反,redo log記錄的是新資料的備份。在事務提交前,只要將redo log持久化即可,
不需要將資料持久化。當系統崩潰時,雖然資料沒有持久化,但是redo log已經持久化。系統可以根據
redo log的內容,將所有資料恢復到最新的狀態。
undo + redo事務的簡化過程
假設有a、b兩個資料,值分別為1,2.
事務開始.
記錄a=1到undo log.
修改a=3.
記錄a=3到redo log.
記錄b=2到undo log.
修改b=4.
記錄b=4到redo log.
將redo log寫入磁碟。
事務提交
undo + redo事務的特點
為了保證永續性,必須在事務提交前將redo log持久化。
資料不需要在事務提交前寫入磁碟,而是快取在記憶體中。
redo log 保證事務的永續性。
undo log 保證事務的原子性。
有乙個隱含的特點,資料必須要晚於redo log寫入持久儲存。
由事務的知識我們知道,在單機專案中,事務的控制一般交由資料庫控制,一般而言,乙個連線就是乙個事務。
但是在分布式專案中,可能對應不同的專案不同的連線,那麼我們就需要乙個全域性事務協調管理器來幫助我們控制事務
那麼全域性事務協調管理器需要做:
採用補償機制;針對每個操作,都要註冊乙個與其相對應的確認和補償操作
可以參考開源方案
hmily
事務 分布式事務
事務 邏輯上的一組操作,要麼都成功要麼都失敗 事務的四個特性 acid 原子性,一致性,隔離性,永續性 事務的隔離級別 讀未提交 產生髒讀 讀已提交 不可重複讀 可重複讀 幻讀 mysql預設 序列化讀 效能最低 傳播行為 7個 七種傳播行為 required 支援當前事務,如果不存在,就新建乙個 ...
分布式事務 分布式事務的實現
如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...