事務提供一種機制將乙個活動涉及的所有操作納入到乙個不可分割的執行單元,組成事務的所有操作只有在所有操作均能正常執行的情況下方能提交,只要其中任一操作執行失敗,都將導致整個事務的回滾。
簡單地說,事務提供一種「要麼什麼都不做,要麼做全套(all or nothing)」機制。
說到資料庫事務就不得不說,資料庫事務中的四大特性 acid:a:原子性(atomicity),乙個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。
事務在執行過程中發生錯誤,會被回滾(rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
就像你買東西要麼交錢收貨一起都執行,要麼發不出貨,就退錢。
c:一致性(consistency),事務的一致性指的是在乙個事務執行之前和執行之後資料庫都必須處於一致性狀態。
如果事務成功地完成,那麼系統中所有變化將正確地應用,系統處於有效狀態。
如果在事務**現錯誤,那麼系統中的所有變化將自動地回滾,系統返回到原始狀態。
i:隔離性(isolation),指的是在併發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間。
由併發事務所做的修改必須與任何其他併發事務所做的修改隔離。事務檢視資料更新時,資料所處的狀態要麼是另一事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會檢視到中間狀態的資料。
打個比方,你買東西這個事情,是不影響其他人的。
d:永續性(durability),指的是只要事務成功結束,它對資料庫所做的更新就必須***儲存下來。
即使發生系統崩潰,重新啟動資料庫系統後,資料庫還能恢復到事務成功結束時的狀態。
打個比方,你買東西的時候需要記錄在賬本上,即使老闆忘記了那也有據可查。
innodb 是 mysql 的乙個儲存引擎,大部分人對 mysql 都比較熟悉,這裡簡單介紹一下資料庫事務實現的一些基本原理。在本地事務中,服務和資源在事務的包裹下可以看做是一體的,如下圖:
我們的本地事務由資源管理器進行管理:
而事務的 acid 是通過 innodb 日誌和鎖來保證。事務的隔離性是通過資料庫鎖的機制實現的,永續性通過 redo log(重做日誌)來實現,原子性和一致性通過 undo log 來實現。
undo log 的原理很簡單,為了滿足事務的原子性,在操作任何資料之前,首先將資料備份到乙個地方(這個儲存資料備份的地方稱為 undo log)。然後進行資料的修改。
如果出現了錯誤或者使用者執行了 rollback 語句,系統可以利用 undo log 中的備份將資料恢復到事務開始之前的狀態。
和 undo log 相反,redo log 記錄的是新資料的備份。在事務提交前,只要將 redo log 持久化即可,不需要將資料持久化。
當系統崩潰時,雖然資料沒有持久化,但是 redo log 已經持久化。系統可以根據 redo log 的內容,將所有資料恢復到***的狀態。對具體實現過程有興趣的同學可以去自行搜尋擴充套件。
分布式事務指事務的參與者、支援事務的伺服器、資源伺服器以及事務管理器分別位於不同的分布式系統的不同節點之上。簡單的說,就是一次大的操作由不同的小操作組成,這些小的操作分布在不同的伺服器上,且屬於不同的應用,分布式事務需要保證這些小操作要麼全部成功,要麼全部失敗。
本質上來說,分布式事務就是為了保證不同資料庫的資料一致性。
從上面本地事務來看,我們可以分為兩塊:
隨著網際網路快速發展,微服務,soa 等服務架構模式正在被大規模的使用。舉個簡單的例子,乙個公司之內,使用者的資產可能分為好多個部分,比如餘額,積分,優惠券等等。
在公司內部有可能積分功能由乙個微服務團隊維護,優惠券又是另外的團隊維護。
這樣的話就無法保證積分扣減了之後,優惠券能否扣減成功。
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...
分布式事務 分布式事務的實現
如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...
分布式之分布式事務
被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...