小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Hibernate學(xué)習(xí)筆記(五)--數(shù)據(jù)庫(kù)事務(wù)與并發(fā)...

 EverestSnow 2007-09-17
章主要講述并發(fā)的幾種情況、數(shù)據(jù)庫(kù)鎖的種類,事務(wù)如何通過(guò)隔離級(jí)別處理并發(fā)。以及Hibernate提供了哪些方法來(lái)處理并發(fā)問(wèn)題

 

數(shù)據(jù)庫(kù)事務(wù)與并發(fā)
概述:事務(wù)通過(guò)隔離級(jí)別控制鎖的形式來(lái)處理數(shù)據(jù)的并發(fā)問(wèn)題。
為什么事務(wù)能夠處理并發(fā)問(wèn)題?
答:事務(wù)的特性決定它能夠處理并發(fā)問(wèn)題:一致性、隔離性、持久性、原子性
數(shù)據(jù)的并發(fā)有哪些情況?
答:
一、后發(fā)生的事務(wù)影響前面的事務(wù)
1、第一類更新丟失:后發(fā)生的事務(wù)回滾覆蓋了前面提交成功的事務(wù)
2、臟讀:后發(fā)生的事務(wù)成功提交覆蓋了前面的回滾的事務(wù)
3、第二類更新丟失:后發(fā)生的事務(wù)成功提交覆蓋了前面的成功提交的事務(wù)
二、后發(fā)生的事務(wù)受到前面的事務(wù)的影響
1、虛讀:后一個(gè)事務(wù)在前后兩次讀取數(shù)據(jù)時(shí)由于前面的已提交的事務(wù)進(jìn)行了插入操作,
         而使數(shù)據(jù)統(tǒng)計(jì)前后不一致。
2、不可重復(fù)讀:后一個(gè)事務(wù)在對(duì)同一條數(shù)據(jù)前后兩次讀取時(shí)由于前面的已提交的事務(wù)
               進(jìn)行了對(duì)這條數(shù)據(jù)更新操作,而使數(shù)據(jù)前后不一致。
事務(wù)如何處理并發(fā)問(wèn)題?
答:
事務(wù)通過(guò)鎖來(lái)處理并發(fā)問(wèn)題一般有兩種方式:
悲觀鎖:通過(guò)數(shù)據(jù)庫(kù)系統(tǒng)的鎖來(lái)處理并發(fā)
樂(lè)觀鎖:通過(guò)應(yīng)用程序邏輯處理并發(fā)
悲觀鎖的種類有哪些?
答:
一、共享鎖:用于讀數(shù)據(jù)操作。
特性:
1、加鎖條件:當(dāng)一個(gè)事務(wù)執(zhí)行select語(yǔ)句時(shí)數(shù)據(jù)庫(kù)系統(tǒng)會(huì)為這個(gè)事務(wù)分配一把共享鎖,來(lái)鎖定被查詢的記錄。
2、解鎖條件:讀取完畢則釋放共享鎖。
3、兼容性:如果數(shù)據(jù)資源上已經(jīng)放了共享鎖還可放共享鎖和更新鎖。
4、并發(fā)性能:具有良好的并發(fā)性能。
二、更新鎖:在更新操作的初始化階段用來(lái)鎖定可能要被修改的資源,避免使用共享鎖造成的死鎖問(wèn)題。
特性:
1、加鎖條件:當(dāng)一個(gè)事務(wù)執(zhí)行update語(yǔ)句時(shí),數(shù)據(jù)庫(kù)系統(tǒng)會(huì)先為事務(wù)分配一個(gè)更新鎖。
2、解鎖條件:當(dāng)讀取數(shù)據(jù)完畢,進(jìn)行更新操作時(shí)將更新鎖升級(jí)為獨(dú)占鎖。
3、兼容性:與共享鎖兼容。一個(gè)數(shù)據(jù)資源上可以有多個(gè)共享鎖和一個(gè)更新鎖。
4、允許多個(gè)事務(wù)同時(shí)讀鎖定的資源,但不允許其它事務(wù)修改它。
三、獨(dú)占鎖:修改數(shù)據(jù)時(shí)使用獨(dú)占鎖。
特性:
1、加鎖條件:當(dāng)執(zhí)行update、delete、insert操作時(shí)數(shù)據(jù)庫(kù)系統(tǒng)會(huì)為數(shù)據(jù)資源使用獨(dú)占鎖。如果該資源上已經(jīng)有其它鎖         
            存在時(shí)則無(wú)法放置獨(dú)占鎖
2、解鎖條件:獨(dú)占鎖一直到事務(wù)結(jié)束才能被解除。
3、兼容性:獨(dú)占鎖不能和其它鎖兼容。
4、并發(fā)性:并發(fā)性能較差。
事務(wù)如何控制鎖的形式?
答:事務(wù)通過(guò)事務(wù)的隔離級(jí)別來(lái)控制鎖的形式。
事務(wù)級(jí)別有哪些?并發(fā)情況怎樣?
答:
隔離級(jí)別
是否出現(xiàn)第一類丟失更新
是否出現(xiàn)臟讀
是否出現(xiàn)虛讀
是否出現(xiàn)不可重復(fù)讀
是否出現(xiàn)第二類丟失更新
Serializable
Repeatable Read
Read Commited
Read Uncommited
在應(yīng)用程序中如何使用樂(lè)觀鎖:
答:一般在數(shù)據(jù)庫(kù)表中增加Version或者是TimeStamp字段,根據(jù)讀取時(shí)以及在進(jìn)行修改操作時(shí)Version或者TimeStamp的值不同來(lái)控制并發(fā)問(wèn)題。
Hibernate是如何處理并發(fā)問(wèn)題的:
答:
一、Hibernate在讀取數(shù)據(jù)時(shí)通過(guò)設(shè)置鎖定模式來(lái)控制悲觀鎖的形式
鎖定模式
描述
LockMode.NONE
如果在Hibernate的緩存中存在指定對(duì)象,就直接返回該對(duì)象的引用;否則就通過(guò)Select語(yǔ)句到數(shù)據(jù)庫(kù)中加載該對(duì)象。這是默認(rèn)值
LockMode.Read
不管Hibernate的緩存中是否存在指定對(duì)象,總是通過(guò)select語(yǔ)句到數(shù)據(jù)庫(kù)中加載該對(duì)象;如果映射文件中設(shè)置了版本元素,就執(zhí)行版本檢查,比較緩存中的指定對(duì)象是否和數(shù)據(jù)庫(kù)中的版本一致。
LockMode.UPGRADE
不管Hibernate的緩存中是否存在指定對(duì)象,總是通過(guò)select語(yǔ)句到數(shù)據(jù)庫(kù)中加載該對(duì)象;如果映射文件中設(shè)置了版本元素,就執(zhí)行版本檢查,比較緩存中的指定對(duì)象是否和數(shù)據(jù)庫(kù)中的版本一致。如果數(shù)據(jù)庫(kù)系統(tǒng)支持悲觀鎖就執(zhí)行select。。。for update語(yǔ)句,如果數(shù)據(jù)庫(kù)系統(tǒng)不支持悲觀鎖,就執(zhí)行普通的select語(yǔ)句。
LockMode.UPGRADE_NOWAIT
和LockMode.UPGRADE具有同樣的功能。此外對(duì)于Oracle數(shù)據(jù)庫(kù),執(zhí)行select。。for update nowait語(yǔ)句。
LockMode.WRITE
當(dāng)Hibernate向數(shù)據(jù)庫(kù)保存或者更新一個(gè)對(duì)象時(shí),會(huì)自動(dòng)使用此模式。這種模式僅供Hibernate內(nèi)部使用。
 
二、Hibernate在映射文件中使用樂(lè)觀鎖處理并發(fā)問(wèn)題
1、<version>元素:此元素指定的字段,每進(jìn)行一次操作就自動(dòng)加1,在進(jìn)行讀取和修改操作時(shí)如果version值不相同則拋出異常,交給應(yīng)用程序處理。
2、<timestamp>元素:此元素指定的字段數(shù)據(jù),每進(jìn)行一次操作就更新成當(dāng)前時(shí)間。由于當(dāng)前時(shí)間精確到妙所以在處理并發(fā)問(wèn)題的精確性上沒有<version>好。
注意:這兩個(gè)元素在使用時(shí)都要緊跟在<id>元素后面。
3、對(duì)于現(xiàn)有的數(shù)據(jù)庫(kù)表不包含version或者timestamp字段,要處理并發(fā)問(wèn)題可以在<class>元素上進(jìn)行如下設(shè)置:
   <class name=”Account” table=”Accounts” optimistic-lock=”all” dynamic-update=”true”>
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多