企業級應用架構模型 併發,事務,鎖

2021-09-07 01:27:11 字數 2310 閱讀 5652

一、併發問題的產生

多執行緒/程序同時操作(讀/寫)同一資料

二、併發問題的種類

髒讀(dirty read)

不可重複讀(non-repeatable read)

幻讀(phantom read)

三、解決方案

四、樂觀鎖策略——衝突檢測

樂觀鎖策略通常是建立在資料的某種版本標記上。為了檢測「丟失更新」,系統核對將要更新的資料的版本標記和共享資料的版本標記,如果兩者一樣,系統更新資料並更新版本標記,否則,只能放棄本次更新,從頭再來。

五、悲觀鎖策略——衝突避免

讀鎖(共享鎖s):對讀鎖開放,對寫鎖封閉( lock table 表名 in share mode)

寫鎖(排他說x):對讀鎖和寫鎖都封閉( select * from 表名 where 條件 for update)

六、死鎖——悲觀鎖會導致死鎖

死鎖解除方案:死鎖超時控制(會導致誤傷持鎖時間長的)、死鎖檢測機制

死鎖預防方案:

七、事務——處理併發問題的主要工具

acid屬性:原子性(actomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)

使用事務時,要防止 鎖公升級(lock escalation),如果乙個事務鎖住了乙個表中的許多行,則資料庫可能無法處理那麼多鎖,只能將鎖公升級到鎖住整個表。

八、事務隔離級別——事務之間用鎖相互隔開

隔離級別就是對事務併發控制的等級。ansi/ iso sql將其分為序列化(serializable)、可重複讀(repeatable read)、讀已提交(read commited)、讀未提交(read uncommited)四個等級。為了實現隔離級別通常資料庫 採用鎖(lock)。一般在程式設計的時候只需要設定隔離等級,至於具體採用什麼鎖則由資料庫來設定。

九、jdbc定義的事務隔離級別

十、spring事務隔離級別的定義和配置

一、幾大資料庫的預設事務隔離級別

隔離級別每種資料庫都不一樣,如果不指定這個屬性的話,就是 default

附錄一:oracle的鎖

oracle鎖分為兩大類:資料鎖(dml鎖)和字典鎖。字典鎖包括語法分析鎖和ddl鎖,有dbms控制,使用者無權控制。

oracle 5種資料鎖:共享鎖、排他鎖、行級共享鎖(rs鎖)、行級排他鎖(rx鎖)、共享行級排他鎖(srx鎖)。加鎖粒度包括行級和表級。

資料鎖相容矩陣:

s    x    rs    rx    srx 

s        y    n    y      n        n

x        n    n    n      n       n

rs      y    n    y      y        y

rx      n    n    y      y        n

srx    n    n    y      n        n

一般情況下,oracle自行加鎖,使用者也可以通過lock table等語句進行加鎖。

oracle預設情況下,讀資料不加鎖,而是通過回滾段防止髒讀和保證可重複讀。

oracle具有死鎖檢查功能,週期性檢查系統是否有死鎖,如果存在死鎖,則撤銷執行更新操作次數最少的事務。

附錄二:jdbc事務隔離級別的測試

view plain

@test

public void testdbtransactionisolation() throws classnotfoundexception,  

sqlexception   

private void settransactionisolation(connection cn, int level,  

string leveldiscription) catch (exception e)   

}  

private void printtransactionisolation(connection cn) throws sqlexception  

讀《企業應用架構模式》 鎖

讀 企業應用架構模式 鎖 author zfive5 zidong email zfive5 163.com 最近招聘的經歷,發現找到乙個滿意的真的好難呀!這些天在班車上又開始讀 企業應用架構模式 這本書像一本哲學書,每次讀的時候都會發現一些新的東西和體會。關於併發鎖控制的兩種方式 樂觀鎖與悲觀鎖 ...

讀《企業應用架構模式》 鎖

讀 企業應用架構模式 鎖 author zfive5 zidong email zfive5 163.com 最近招聘的經歷,發現找到乙個滿意的真的好難呀!這些天在班車上又開始讀 企業應用架構模式 這本書像一本哲學書,每次讀的時候都會發現一些新的東西和體會。關於併發鎖控制的兩種方式 樂觀鎖與悲觀鎖 ...

EJB 企業級應用的架構 5

ejb擴充套件元件 ejb的依賴注入,都是依賴於jndi的。在ejb組建中呼叫其他的ejb元件 可以借助於jndi,查詢到其他ejb元件,也可以借助於業務介面,呼叫ejb例項中的業務方法,也可以同國直接引用其他的需要的ejb元件的業務介面,但是需要使用標註。例 ejb taxrate tr 標註 s...