事務特點以及分布式事務

2021-10-08 04:11:12 字數 1979 閱讀 2292

分布式事務

事務:其實乙個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...