1、數據庫事務的ACID四大特性數據庫
一、一致性:結算合理性,一個轉帳這邊扣除了1萬塊,另一邊就必定要收到1萬塊,不能我這邊扣除了一萬塊,那邊只收到5千塊,這個就不一致了!框架
二、原子性:一連串的動做事務,要麼所有執行完畢,要麼所有回退,不能夠有執行一半留着一半的概念分佈式
三、隔離性:兩個事務之間相互不干擾,彼此獨立隔離!spa
事務的隔離級別:隊列
1)事務可能出現的問題以下:事務
髒讀:讀到別人還未最終提交的數據(可能別人最後回滾),讀到的數據就不是準確最終的數據資源
不可重複讀:一個事務前後兩次讀同一行數據都不同(有人在期間更新Update了)。例如:先判斷一個主鍵是否存在,不存在則插入這個主鍵值1。這個事務中有兩個任務,第一任務執行完發現沒有這個主鍵值1,它就立刻準備第二個任務插入這個1,而此時有另外一個事務就在第一任務的時候碰巧插入一個主鍵值1,這時候若是事務1的第二個任務因爲插入重複的主鍵會報錯!!(針對的是 update)消息隊列
幻讀:同一個事務第一次全盤搜索的時候,原本查到有3條,第二次查詢是4次。(幻讀)。(一個事務中有兩次同樣的查詢任務,先後兩次查不同)it
注意幻讀和不可重複讀之間的區別(針對的是「insert」和「delete」)io
2)事務隔離級別
因爲存在以上的事務風險,因此數據庫提供了事務隔離級別:
讀未提交(Read Uncommitted)讀提交(Read Committed)可重複讀(Repeated Read)
串行化(Serializable):
:這是數據庫最高的隔離級別,這種級別下,事務「串行化順序執行」,也就是一個一個排隊執行。
四、持久性:事務對數據寫入以後,就應當永久存在數據庫中。
2、分佈式事務
一、CAP理論:只能CP 或者 AP。可用性和一致性互斥。
- 一致性(Consistency) : 客戶端知道一系列的操做都會同時發生(生效)
- 可用性(Availability) : 每一個操做都必須以可預期的響應結束
- 分區容錯性(Partition tolerance) : 即便出現單個組件沒法可用,操做依然能夠完成
二、BASE理論:
BA:基本可用:出現了不可預知的故障,但仍是能用
S:軟狀態:暫時性容許相關副本節點有中間狀態
E:最終一致性,不要求強一致性,不過經過一些業務處理,稍微晚一點達到最終一致性便可!!
三、處理分佈式事務的幾種方法:
1) 2PC/AX 兩次提交,資源管理器(MySQL)須要具有兼容AX協議。而且使用特定AX的鏈接池,如今有一個框架可使用!!
其實反觀數據庫的事務也會發現也有兩次提交的概念!1)先寫入數據2)submit/rallback 也都是是這個過程!
2) TCC:TRY/CONFIRM/CANCLE
3)TX-TCN:一種國人開源的解決方案
4) 使用MQ消息隊列達到事務最終一致性