瞎掰事務(一):四大特性立體關係剖析

四大特性

A–原子性,事務中所有操作是不可再分割的原子單位。事務中所有操作要麼全部執行成功,要麼全部執行失敗;

C–一致性,事務執行後,數據庫狀態與其它業務規則保持一致;

I–隔離性,指在併發操作中,不同事務之間應該隔離開來,使每個併發中的事務不會相互干擾。

D–持久性。一旦事務提交成功,事務中所有的數據操作都必須被持久化到數據庫中,即使提交事務後,數據庫馬上崩潰,在數據庫重啓時,也必須能保證通過某種機制恢復數據

比較難理解的是一致性的表述。有一種補充解釋是一致性保證的是從一種狀態到另一種狀態的一致維護,而保證不出現中間狀態。當注意力放在中間狀態時,一致性與隔離性的定義有重疊,當注意力放在兩種狀態的切換,又與原子性的定義有重疊。所以這樣的解釋對於深入理解事務的四大特性是不完美的。

四大特性的深入理解

一個完整的事務系統需要數據庫,事務框架,業務邏輯三層組成。數據庫是事務構成的基石,這也是數據庫區別於文件系統的主要特徵。在數據庫層級上,提供了事務隔離級別的實現。一般的事務隔離級別分爲四級
讀未提交:read uncommitted
讀已提交:read committed
可重複讀:repeatable read
串行化:serializable
在這裏插入圖片描述

本質上,事務的隔離性是由數據庫層級上的隔離級別保證的。持久性也是數據庫層級所保證的,這個很容易理解。到了原子性,情況發生了變化。數據庫層級提供了commit 和 rollback 的函數,但是這沒有提供全部成功和全部失敗的原子性完全保證,仍需要事務框架的支持。這就是事務託管方。事務託管方可以是持久化框架如Mybatis,Hibernate等,也有可能是更高一點的框架,如spring framework,還有一種比較容易被忽視的,就是手動編寫的完整的具有事務控制的SQL 腳本,這與其他事務託管方所完成的工作幾乎一樣。當然最常見的還是spring 的事務模塊,在下一篇我們可以對spring 事務的細節展開,這裏我們繼續扣題發揮。最後就是一致性了。一致性的保證是最特殊的,需要數據庫,事務框架,業務邏輯自下而上的共同維護。數據庫層級提供持久性和隔離性的保證,並提高原子性的能力與事務框架共同提供原子性保證,基於這些下層能力的基礎,才能最終在頂層業務的邏輯層完成一致性的保證。所以一致性是數據庫狀態與其他業務規則保持一致。沿用轉賬的例子
A賬號往B賬號裏轉5000,這時候數據庫要執行兩行代碼:
A:減去5000
B:加上5000
這是一致性完好的情況,如果代碼爲
A:減去5000
B:加上5001
這就是對一致性的破壞。一致性的範圍起源於數據庫,表現於業務規則。

所以認爲隔離性和原子性與一致性是有重疊的,更好的解釋是他們的關係是因果的鏈式關係。再關注一下他們”非重疊的部分“
在這裏插入圖片描述

隔離級別在RR以上,一致性和隔離性是”吻合“的,但在RR之下,事務內的中間狀態對其他事務而言是暴露的。這是對關於一致性對可見性約束的破壞,他們的關係是一種互斥的關係;另一方面也說明他們管轄範圍的不同。至於更多的不同或側重點不需一一贅言。

這裏瞎掰了事務四大特性立體的關係,關於更多或者不同的理解您可以留言討論。後面關於事務有更多的分析,歡迎拍磚

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章