樂觀鎖和悲觀鎖

2021-09-08 05:22:47 字數 990 閱讀 6130

一 、樂觀鎖和悲觀鎖

【悲觀鎖】意思就是a查詢的時候,b不能查詢 修改

所謂悲觀鎖就是基於資料庫機制實現的。

比如在在使用select子句的時候加上for update,

那麼直到改子句的事務結束為止,任何應用都無法修改select出來的記錄。

【樂觀鎖】個人認為樂觀鎖就是表裡有乙個存放版本version的字段,修改的時候查詢出來比如version是1,a修改完之後將其version加1為2放入資料庫,這時候b也在查詢version值也是1,修改完後也加了1放入資料庫2,此時插入的話版本號已經有2了,這時候駁回b的請求

所謂樂觀鎖是基於應用的版本機制來實現的。

資料庫中帳戶資訊表中有乙個 version欄位,當前值為1;而當前帳戶餘額字段(balance)為$100。 

1、操作員a 此時將其讀出(version=1),並從其帳戶餘額中扣除$50 ($100-$50)。 

2、在操作員a操作的過程中,操作員b也讀入此使用者資訊(version=1),並從其帳戶餘額中扣除$20($100-$20)。 

3、操作員a完成了修改工作,將資料版本號加一(version=2),連同帳戶扣除後餘額(balance=$50),提交至資料庫更新,此時由於提交資料版本大於資料庫記錄當前版本,資料被更新,資料庫記錄version更新為2。 

4、操作員b完成了操作,也將版本號加一(version=2)試圖向資料庫提交資料(balance=$80),但此時比對資料庫記錄版本時發現,操作員b提交的資料版本號為2,資料庫記錄當前版本也為2,不滿足「提交版本必須大於記錄當前版本才能執行更新「的樂觀鎖策略,

因此,操作員b 的提交被駁回。這樣就避免了操作員b 用基於version=1 的舊資料修改的結果覆蓋操作員a的操作結果的可能。

樂觀鎖機制避免了長事務中的資料庫加鎖開銷(操作員a 和操作員b操作過程中,都沒有對資料庫資料加鎖),大大提公升了大併發量下的系 統整體效能表現。

樂觀鎖、悲觀鎖 是從是否鎖資料方面進行分類。

共享鎖、排它鎖是從 鎖的型別進行分類。

樂觀鎖和悲觀鎖

1 悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...

樂觀鎖和悲觀鎖

併發衝突 在多使用者的環境下,如果使用者同時修改同乙個文件,就會造成衝突。典型的衝突有兩種 1 丟失更新 乙個使用者的更新記錄覆蓋了另乙個人的更新。如 使用者一 讀 寫 使用者二 讀 寫 那麼使用者一就把使用者二的更新覆蓋了。2 髒讀 乙個使用者更新資料未完成時,另乙個使用者就讀取資訊。使用者一 讀...

樂觀鎖和悲觀鎖

為什麼需要鎖 併發控制 在多使用者環境中,在同一時間可能會有多個使用者更新相同的記錄,這會產生衝突。這就是著名的併發性問題。典型的衝突有 l 丟失更新 乙個事務的更新覆蓋了其它事務的更新結果,就是所謂的更新丟失。例如 使用者a把值從6改為2,使用者b把值從2改為6,則使用者a丟失了他的更新。l 髒讀...