樂觀鎖與悲觀鎖簡(jiǎn)介

悲觀鎖

在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)里刷喜,悲觀并發(fā)控制(又名“悲觀鎖”,Pessimistic Concurrency Control剔氏,縮寫“PCC”)是一種并發(fā)控制的方法酗宋。它可以阻止一個(gè)事務(wù)以影響其他用戶的方式來修改數(shù)據(jù)威恼。如果一個(gè)事務(wù)執(zhí)行的操作都某行數(shù)據(jù)應(yīng)用了鎖品姓,那只有當(dāng)這個(gè)事務(wù)把鎖釋放,其他事務(wù)才能夠執(zhí)行與該鎖沖突的操作沃测。
悲觀并發(fā)控制主要用于數(shù)據(jù)爭(zhēng)用激烈的環(huán)境缭黔,以及發(fā)生并發(fā)沖突時(shí)使用鎖保護(hù)數(shù)據(jù)的成本要低于回滾事務(wù)的成本的環(huán)境中。

悲觀鎖蒂破,正如其名馏谨,它指的是對(duì)數(shù)據(jù)被外界(包括本系統(tǒng)當(dāng)前的其他事務(wù),以及來自外部系統(tǒng)的事務(wù)處理)修改持保守態(tài)度(悲觀)附迷,因此惧互,在整個(gè)數(shù)據(jù)處理過程中,將數(shù)據(jù)處于鎖定狀態(tài)喇伯。 悲觀鎖的實(shí)現(xiàn)喊儡,往往依靠數(shù)據(jù)庫(kù)提供的鎖機(jī)制 (也只有數(shù)據(jù)庫(kù)層提供的鎖機(jī)制才能真正保證數(shù)據(jù)訪問的排他性,否則稻据,即使在本系統(tǒng)中實(shí)現(xiàn)了加鎖機(jī)制艾猜,也無法保證外部系統(tǒng)不會(huì)修改數(shù)據(jù)).

悲觀鎖,假定會(huì)發(fā)生并發(fā)沖突,屏蔽一切可能違反數(shù)據(jù)完整性的操作。悲觀鎖假定其他用戶企圖訪問或者改變你正在訪問匆赃、更改的對(duì)象的概率是很高的淤毛,因此在悲觀鎖的環(huán)境中,在你開始改變此對(duì)象之前就將該對(duì)象鎖住算柳,并且直到你提交了所作的更改之后才釋放鎖低淡。悲觀的缺陷是不論是頁(yè)鎖還是行鎖,加鎖的時(shí)間可能會(huì)很長(zhǎng)瞬项,這樣可能會(huì)長(zhǎng)時(shí)間的限制其他用戶的訪問蔗蹋,也就是說悲觀鎖的并發(fā)訪問性不好。

悲觀鎖應(yīng)用

  • 需要使用數(shù)據(jù)庫(kù)的鎖機(jī)制

樂觀鎖

在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)里囱淋,樂觀并發(fā)控制(又名“樂觀鎖”猪杭,Optimistic Concurrency Control,縮寫“OCC”)是一種并發(fā)控制的方法绎橘。它假設(shè)多用戶并發(fā)的事務(wù)在處理時(shí)不會(huì)彼此互相影響胁孙,各事務(wù)能夠在不產(chǎn)生鎖的情況下處理各自影響的那部分?jǐn)?shù)據(jù)唠倦。在提交數(shù)據(jù)更新之前称鳞,每個(gè)事務(wù)會(huì)先檢查在該事務(wù)讀取數(shù)據(jù)后,有沒有其他事務(wù)又修改了該數(shù)據(jù)稠鼻。如果其他事務(wù)有更新的話冈止,正在提交的事務(wù)會(huì)進(jìn)行回滾。樂觀事務(wù)控制最早是由孔祥重(H.T.Kung)教授提出候齿。

樂觀鎖( Optimistic Locking ) 相對(duì)悲觀鎖而言熙暴,樂觀鎖假設(shè)認(rèn)為數(shù)據(jù)一般情況下不會(huì)造成沖突,所以在數(shù)據(jù)進(jìn)行提交更新的時(shí)候慌盯,才會(huì)正式對(duì)數(shù)據(jù)的沖突與否進(jìn)行檢測(cè)周霉,如果發(fā)現(xiàn)沖突了,則讓返回用戶錯(cuò)誤的信息亚皂,讓用戶決定如何去做俱箱。

樂觀鎖,假設(shè)不會(huì)發(fā)生并發(fā)沖突,只在提交操作時(shí)檢查是否違反數(shù)據(jù)完整性灭必。樂觀鎖不能解決臟讀的問題狞谱。樂觀鎖則認(rèn)為其他用戶企圖改變你正在更改的對(duì)象的概率是很小的,因此樂觀鎖直到你準(zhǔn)備提交所作的更改時(shí)才將對(duì)象鎖住禁漓,當(dāng)你讀取以及改變?cè)搶?duì)象時(shí)并不加鎖跟衅。可見樂觀鎖加鎖的時(shí)間要比悲觀鎖短播歼,樂觀鎖可以用較大的鎖粒度獲得較好的并發(fā)訪問性能伶跷。但是如果第二個(gè)用戶恰好在第一個(gè)用戶提交更改之前讀取了該對(duì)象,那么當(dāng)他完成了自己的更改進(jìn)行提交時(shí),數(shù)據(jù)庫(kù)就會(huì)發(fā)現(xiàn)該對(duì)象已經(jīng)變化了叭莫,這樣磷支,第二個(gè)用戶不得不重新讀取該對(duì)象并作出更改。這說明在樂觀鎖環(huán)境中食寡,會(huì)增加并發(fā)用戶讀取對(duì)象的次數(shù)雾狈。

樂觀鎖應(yīng)用

  • 使用版本號(hào)
  • 使用時(shí)間戳

樂觀鎖與悲觀鎖的優(yōu)點(diǎn)和缺點(diǎn)

悲觀并發(fā)控制實(shí)際上是“先取鎖再訪問”的保守策略,為數(shù)據(jù)處理的安全提供了保證抵皱。但是在效率方面善榛,處理加鎖的機(jī)制會(huì)讓數(shù)據(jù)庫(kù)產(chǎn)生額外的開銷,還有增加產(chǎn)生死鎖的機(jī)會(huì)呻畸;另外移盆,在只讀型事務(wù)處理中由于不會(huì)產(chǎn)生沖突,也沒必要使用鎖伤为,這樣做只能增加系統(tǒng)負(fù)載咒循;還有會(huì)降低了并行性,一個(gè)事務(wù)如果鎖定了某行數(shù)據(jù)绞愚,其他事務(wù)就必須等待該事務(wù)處理完才可以處理那行數(shù)

樂觀并發(fā)控制相信事務(wù)之間的數(shù)據(jù)競(jìng)爭(zhēng)(data race)的概率是比較小的叙甸,因此盡可能直接做下去,直到提交的時(shí)候才去鎖定位衩,所以不會(huì)產(chǎn)生任何鎖和死鎖裆蒸。但如果直接簡(jiǎn)單這么做腹侣,還是有可能會(huì)遇到不可預(yù)期的結(jié)果郊艘,例如兩個(gè)事務(wù)都讀取了數(shù)據(jù)庫(kù)的某一行,經(jīng)過修改以后寫回?cái)?shù)據(jù)庫(kù)吼蚁,這時(shí)就遇到了問題贮缕。

從數(shù)據(jù)庫(kù)廠商的角度看辙谜,使用樂觀的頁(yè)鎖是比較好的,尤其在影響很多行的批量操作中可以放比較少的鎖感昼,從而降低對(duì)資源的需求提高數(shù)據(jù)庫(kù)的性能装哆。再考慮聚集索引。在數(shù)據(jù)庫(kù)中記錄是按照聚集索引的物理順序存放的抑诸。如果使用頁(yè)鎖烂琴,當(dāng)兩個(gè)用戶同時(shí)訪問更改位于同一數(shù)據(jù)頁(yè)上的相鄰兩行時(shí),其中一個(gè)用戶必須等待另一個(gè)用戶釋放鎖蜕乡,這會(huì)明顯地降低系統(tǒng)的性能奸绷。interbase和大多數(shù)關(guān)系數(shù)據(jù)庫(kù)一樣,采用的是樂觀鎖层玲,而且讀鎖是共享的号醉,寫鎖是排他的反症。可以在一個(gè)讀鎖上再放置讀鎖畔派,但不能再放置寫鎖铅碍;你不能在寫鎖上再放置任何鎖。鎖是目前解決多用戶并發(fā)訪問的有效手段线椰。

在實(shí)際生產(chǎn)環(huán)境里邊,如果并發(fā)量不大且不允許臟讀胞谈,可以使用悲觀鎖解決并發(fā)問題;但如果系統(tǒng)的并發(fā)非常大的話,悲觀鎖定會(huì)帶來非常大的性能問題,所以我們就要選擇樂觀鎖定的方法.

參考

http://www.cnblogs.com/Bob-FD/p/3352216.html

http://www.hollischuang.com/archives/934

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末憨愉,一起剝皮案震驚了整個(gè)濱河市烦绳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌配紫,老刑警劉巖径密,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異躺孝,居然都是意外死亡享扔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門植袍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惧眠,“玉大人,你說我怎么就攤上這事奋单★笔裕” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵览濒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我拖云,道長(zhǎng)贷笛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任宙项,我火速辦了婚禮乏苦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尤筐。我一直安慰自己汇荐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布盆繁。 她就那樣靜靜地躺著掀淘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪油昂。 梳的紋絲不亂的頭發(fā)上革娄,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天倾贰,我揣著相機(jī)與錄音,去河邊找鬼拦惋。 笑死匆浙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厕妖。 我是一名探鬼主播首尼,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼言秸!你這毒婦竟也來了饰恕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤井仰,失蹤者是張志新(化名)和其女友劉穎埋嵌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俱恶,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雹嗦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了合是。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片了罪。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖聪全,靈堂內(nèi)的尸體忽然破棺而出泊藕,到底是詐尸還是另有隱情,我是刑警寧澤难礼,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布娃圆,位于F島的核電站,受9級(jí)特大地震影響蛾茉,放射性物質(zhì)發(fā)生泄漏讼呢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一谦炬、第九天 我趴在偏房一處隱蔽的房頂上張望悦屏。 院中可真熱鬧,春花似錦键思、人聲如沸础爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)看蚜。三九已至,卻和暖如春赖条,著一層夾襖步出監(jiān)牢的瞬間失乾,已是汗流浹背常熙。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碱茁,地道東北人裸卫。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像纽竣,于是被迫代替她去往敵國(guó)和親墓贿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容