1. 程式人生 > >一步步學習並發:了解並發是如何發生的

一步步學習並發:了解並發是如何發生的

精益 進行 招商銀行 臟讀 銀行卡 事務 沒有 個數 余額

十年河東,十年河西,莫欺少年窮

學無止境,精益求精

數據庫操作的並發問題是沒法避免的,並發會引起如下問題:

舉例說明:

數據庫事務並發帶來的問題有:更新丟失、臟讀、不可重復讀、幻象讀。假設張三辦了一張招商銀行卡,余額100元,分別說明上述情況。
1、更新丟失:一個事務的更新覆蓋了另一個事務的更新。事務A:向銀行卡存錢100元。事務B:向銀行卡存錢200元。A和B同時讀到銀行卡的余額,分別更新余額,後提交的事務B覆蓋了事務A的更新。
更新丟失本質上是寫操作的沖突,解決辦法是一個一個執行。
2、臟讀:一個事務讀取了另一個事務未提交的數據。事務A:張三妻子給張三轉賬100元。事務B:張三查詢余額。事務A轉賬後(還未提交),事務B查詢多了100元。事務A由於某種問題,比如超時,
進行回滾。事務B查詢到的數據是假數據。臟讀本質上是讀寫操作的沖突,解決辦法是寫完之後再讀。
3、不可重復讀:一個事務兩次讀取同一個數據,兩次讀取的數據不一致。事務A:張三妻子給張三轉賬100元。事務B:張三兩次查詢余額。事務B第一次查詢余額,事務A還沒有轉賬,第二次查詢余額
,事務A已經轉賬了,導致一個事務中,兩次讀取同一個數據,讀取的數據不一致。不可重復讀本質上是讀寫操作的沖突,解決辦法是讀完再寫。
4、幻象讀:一個事務兩次讀取一個範圍的記錄,兩次讀取的記錄數不一致。事務A:張三妻子兩次查詢張三有幾張銀行卡。事務B:張三新辦一張銀行卡。事務A第一次查詢銀行卡數的時候,張三還沒
有新辦銀行卡,第二次查詢銀行卡數的時候,張三已經新辦了一張銀行卡,導致兩次讀取的銀行卡數不一樣。幻象讀本質上是讀寫操作的沖突,解決辦法是讀完再寫。

看到上面的列子,想必大家應該知道並發是如何發生的了

其實,究其本質,就是同一時間內,多個不同操作者,操作統一數據時引起並發。

一步步學習並發:了解並發是如何發生的