婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL中的樂觀鎖,悲觀鎖和MVCC全面解析

MySQL中的樂觀鎖,悲觀鎖和MVCC全面解析

熱門標簽:電話外呼系統改號 啥是企業400電話辦理 外呼系統打電話上限是多少 百應電話機器人優勢 地圖標注費用是多少 怎樣在地圖標注銷售區域 南昌三維地圖標注 曲靖移動外呼系統公司 武漢網絡外呼系統服務商

前言

在數據庫的實際使用過程中,我們常常會遇到不希望數據被同時寫或者讀的情景,例如秒殺場景下,兩個請求同時讀到系統還有庫存1個,然后又先后把庫存更新為0,這時候就會出現超賣的情況,這時候貨物的實際庫存和我們的記錄就會對應不上了。

為了解決這種資源競爭導致的數據不一致等問題,我們需要有一種機制來進行保證數據的正確訪問和修改,而在數據庫中,這種機制就是數據庫的并發控制。其中樂觀并發控制,悲觀并發控制和多版本并發控制是數據庫并發控制主要采用的技術手段。

悲觀并發控制

本質

維基百科:在關系數據庫管理系統里,悲觀并發控制(又名“悲觀鎖”,Pessimistic Concurrency Control,縮寫“PCC”)是一種并發控制的方法。它可以阻止一個事務以影響其他用戶的方式來修改數據。如果一個事務執行的操作讀某行數據應用了鎖,那只有當這個事務把鎖釋放,其他事務才能夠執行與該鎖沖突的操作。

事實上我們常說的悲觀鎖并不是一種實際的鎖,而是一種并發控制的思想,悲觀并發控制對于數據被修改持悲觀的態度,認為數據被外界訪問時,必然會產生沖突,所以在數據處理的過程中都采用加鎖的方式來保證對資源的獨占。

數據庫的鎖機制其實都是基于悲觀并發控制的觀點進行實現的,而且按照實際使用情況,數據庫的鎖又可以分為許多種類,具體可以見我后面的文章。

實現方式

數據庫悲觀鎖的加鎖流程大致如下:

開始事務后,按照操作類型給需要加鎖的數據申請加某一類鎖:例如共享行鎖等
加鎖成功則繼續后面的操作,如果數據已經被加了其他的鎖,而且和現在要加的鎖沖突,則會加鎖失敗(例如已經加了排他鎖),此時需等待其他的鎖釋放(可能出現死鎖)
完成事務后釋放所加的鎖

優缺點

優點:

悲觀并發控制采取的是保守策略:“先取鎖,成功了才訪問數據”,這保證了數據獲取和修改都是有序進行的,因此適合在寫多讀少的環境中使用。當然使用悲觀鎖無法維持非常高的性能,但是在樂觀鎖也無法提供更好的性能前提下,悲觀鎖卻可以做到保證數據的安全性。

缺點:
由于需要加鎖,而且可能面臨鎖沖突甚至死鎖的問題,悲觀并發控制增加了系統的額外開銷,降低了系統的效率,同時也會降低了系統的并行性。

樂觀并發控制

本質

維基百科:在關系數據庫管理系統里,樂觀并發控制(又名“樂觀鎖”,Optimistic Concurrency Control,縮寫“OCC”)是一種并發控制的方法。它假設多用戶并發的事務在處理時不會彼此互相影響,各事務能夠在不產生鎖的情況下處理各自影響的那部分數據。
樂觀并發控制對數據修改持樂觀態度,認為即使在并發環境中,外界對數據的操作一般是不會造成沖突,所以并不會去加鎖,而是在提交數據更新之前,每個事務會先檢查在該事務讀取數據后,有沒有其他事務又修改了該數據。如果其他事務有更新的話,則讓返回沖突信息,讓用戶決定如何去做下一步,比如說重試或者回滾。

可以看出,樂觀鎖其實也不是實際的鎖,甚至沒有用到鎖來實現并發控制,而是采取其他方式來判斷能否修改數據。樂觀鎖一般是用戶自己實現的一種鎖機制,雖然沒有用到實際的鎖,但是能產生加鎖的效果。

實現方式

CAS(比較與交換,Compare and swap) 是一種有名的無鎖算法。無鎖編程,即不使用鎖的情況下實現多線程之間的變量同步,也就是在沒有線程被阻塞的情況下實現變量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。實現非阻塞同步的方案稱為“無鎖編程算法”( Non-blocking algorithm)。

樂觀鎖基本都是基于 CAS(Compare and swap)算法來實現的。我們先來看下CAS過程,一個CAS操作的過程可以用以下c代碼表示:

int cas(long *addr, long old, long new)
{
 /* Executes atomically. */
 if(*addr != old)
  return 0;
 *addr = new;
 return 1;
}

CAS有3個操作數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值A和內存值V相同時,將內存值V修改為B,否則什么都不做。整個CAS操作是一個原子操作,是不可分割的。

樂觀鎖的實現就類似于上面的過程,主要有以下幾種方式:

  • 版本號標記:在表中新增一個字段:version,用于保存版本號。獲取數據的時候同時獲取版本號,然后更新數據的時候用以下命令:update xxx set version=version+1,… where … version="old version" and ....。這時候通過判斷返回結果的影響行數是否為0來判斷是否更新成功,更新失敗則說明有其他請求已經更新了數據了。
  • 時間戳標記:和版本號一樣,只是通過時間戳來判斷。一般來說很多數據表都會有更新時間這一個字段,通過這個字段來判斷就不用再新增一個字段了。
  • 待更新字段:如果沒有時間戳字段,而且不想新增字段,那可以考慮用待更新字段來判斷,因為更新數據一般都會發生變化,那更新前可以拿要更新的字段的舊值和數據庫的現值進行比對,沒有變化則更新。
  • 所有字段標記:數據表所有字段都用來判斷。這種相當于就、不僅僅對某幾個字段做加鎖了,而是對整個數據行加鎖,只要本行數據發生變化,就不進行更新。

優缺點

優點:

樂觀并發控制沒有實際加鎖,所以沒有額外開銷,也不錯出現死鎖問題,適用于讀多寫少的并發場景,因為沒有額外開銷,所以能極大提高數據庫的性能。

缺點:
樂觀并發控制不適合于寫多讀少的并發場景下,因為會出現很多的寫沖突,導致數據寫入要多次等待重試,在這種情況下,其開銷實際上是比悲觀鎖更高的。而且樂觀鎖的業務邏輯比悲觀鎖要更為復雜,業務邏輯上要考慮到失敗,等待重試的情況,而且也無法避免其他第三方系統對數據庫的直接修改的情況。

多版本并發控制

本質

維基百科: 多版本并發控制(Multiversion concurrency control, MCC 或 MVCC),是數據庫管理系統常用的一種并發控制,也用于程序設計語言實現事務內存。

樂觀并發控制和悲觀并發控制都是通過延遲或者終止相應的事務來解決事務之間的競爭條件來保證事務的可串行化;雖然前面的兩種并發控制機制確實能夠從根本上解決并發事務的可串行化的問題,但是其實都是在解決寫沖突的問題,兩者區別在于對寫沖突的樂觀程度不同(悲觀鎖也能解決讀寫沖突問題,但是性能就一般了)。而在實際使用過程中,數據庫讀請求是寫請求的很多倍,我們如果能解決讀寫并發的問題的話,就能更大地提高數據庫的讀性能,而這就是多版本并發控制所能做到的事情。

與悲觀并發控制和樂觀并發控制不同的是,MVCC是為了解決讀寫鎖造成的多個、長時間的讀操作餓死寫操作問題,也就是解決讀寫沖突的問題。MVCC 可以與前兩者中的任意一種機制結合使用,以提高數據庫的讀性能。

數據庫的悲觀鎖基于提升并發性能的考慮,一般都同時實現了多版本并發控制。不僅是MySQL,包括Oracle、PostgreSQL等其他數據庫系統也都實現了MVCC,但各自的實現機制不盡相同,因為MVCC沒有一個統一的實現標準。

總的來說,MVCC的出現就是數據庫不滿用悲觀鎖去解決讀-寫沖突問題,因性能不高而提出的解決方案。

實現方式

MVCC的實現,是通過保存數據在某個時間點的快照來實現的。每個事務讀到的數據項都是一個歷史快照,被稱為快照讀,不同于當前讀的是快照讀讀到的數據可能不是最新的,但是快照隔離能使得在整個事務看到的數據都是它啟動時的數據狀態。而寫操作不覆蓋已有數據項,而是創建一個新的版本,直至所在事務提交時才變為可見。

當前讀和快照讀

什么是MySQL InnoDB下的當前讀和快照讀?

當前讀
像select lock in share mode(共享鎖), select for update ; update, insert ,delete(排他鎖)這些操作都是一種當前讀,為什么叫當前讀?就是它讀取的是記錄的最新版本,讀取時還要保證其他并發事務不能修改當前記錄,會對讀取的記錄進行加鎖。

快照讀
像不加鎖的select操作就是快照讀,即不加鎖的非阻塞讀;快照讀的前提是隔離級別不是未提交讀和串行化級別,因為未提交讀總是讀取最新的數據行,而不是符合當前事務版本的數據行。而串行化則會對所有讀取的行都加鎖

優缺點

MVCC 使大多數讀操作都可以不用加鎖,這樣設計使得讀數據操作很簡單,性能很好,并且也能保證只會讀取到符合標準的行。不足之處是每行記錄都需要額外的存儲空間,需要做更多的行檢查工作,以及一些額外的維護工作。

適用場景

悲觀鎖

用來解決讀-寫沖突和寫-寫沖突的的加鎖并發控制
適用于寫多讀少,寫沖突嚴重的情況,因為悲觀鎖是在讀取數據的時候就加鎖的,讀多的場景會需要頻繁的加鎖和很多的的等待時間,而在寫沖突嚴重的情況下使用悲觀鎖可以保證數據的一致性
數據一致性要求高
可以解決臟讀,幻讀,不可重復讀,第一類更新丟失,第二類更新丟失的問題

樂觀鎖

解決寫-寫沖突的無鎖并發控制
適用于讀多寫少,因為如果出現大量的寫操作,寫沖突的可能性就會增大,業務層需要不斷重試,這會大大降低系統性能
數據一致性要求不高,但要求非常高的響應速度
無法解決臟讀,幻讀,不可重復讀,但是可以解決更新丟失問題

MVCC

解決讀-寫沖突的無鎖并發控制
與上面兩者結合,提升它們的讀性能

以上就是MySQL中的樂觀鎖和悲觀鎖和MVCC全面解析的詳細內容,更多關于MySQL中的樂觀鎖和悲觀鎖和MVCC的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 詳解MySQL事務的隔離級別與MVCC
  • Mysql MVCC機制原理詳解
  • mysql的MVCC多版本并發控制的實現
  • 詳解MySQL 數據庫隔離級別與MVCC
  • 淺析MySQL - MVCC
  • mysql多版本并發控制MVCC的實現
  • 關于Mysql隔離級別、鎖與MVCC介紹
  • 詳解MySQL多版本并發控制機制(MVCC)源碼

標簽:吉林 甘南 隨州 荊州 滄州 錦州 資陽 黑河

巨人網絡通訊聲明:本文標題《MySQL中的樂觀鎖,悲觀鎖和MVCC全面解析》,本文關鍵詞  MySQL,中的,樂觀,鎖,悲觀,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL中的樂觀鎖,悲觀鎖和MVCC全面解析》相關的同類信息!
  • 本頁收集關于MySQL中的樂觀鎖,悲觀鎖和MVCC全面解析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩精品一区国产麻豆| 91麻豆蜜桃一区二区三区| 欧美性高清videossexo| 婷婷一区二区三区| 亚洲视频中文字幕| 精品久久久久久久一区二区蜜臀| 成人精品高清在线| 男人的j进女人的j一区| 综合婷婷亚洲小说| 国产精品网站导航| 欧美tk—视频vk| 欧美精品丝袜中出| 91视频国产资源| 韩国欧美国产1区| 丝袜诱惑亚洲看片| 亚洲精品少妇30p| 国产欧美中文在线| 日韩欧美一区二区视频| 91麻豆精东视频| 成人av在线网| 国产精品中文字幕日韩精品| 免费日本视频一区| 日本午夜精品一区二区三区电影 | jizzjizzjizz欧美| 一本久久综合亚洲鲁鲁五月天| 国产精品1区2区| 久久精品噜噜噜成人88aⅴ| 国产精品综合二区| 国产盗摄女厕一区二区三区| 国产99精品视频| 国内国产精品久久| 久久电影网站中文字幕| 美女mm1313爽爽久久久蜜臀| 日韩电影网1区2区| 蜜桃久久久久久久| 美女免费视频一区二区| 爽好久久久欧美精品| 亚洲综合激情网| 亚洲免费观看高清完整版在线| 国产精品麻豆一区二区| 国产精品电影院| 专区另类欧美日韩| 亚洲一二三四在线| 日本v片在线高清不卡在线观看| 调教+趴+乳夹+国产+精品| 亚洲国产综合人成综合网站| 亚洲午夜精品网| 免费不卡在线视频| 韩国三级中文字幕hd久久精品| 久久99国产精品免费| 久久99国产精品尤物| 国产精品一区二区黑丝| 成人国产精品免费观看| 在线亚洲一区二区| 欧美男生操女生| 久久一留热品黄| 亚洲黄网站在线观看| 青青草97国产精品免费观看无弹窗版| 国产精品一卡二卡| 欧美日韩国产bt| 中文字幕在线不卡一区| 日本欧美一区二区| 一本到不卡免费一区二区| 欧美酷刑日本凌虐凌虐| 欧美激情一区二区三区| 丝袜a∨在线一区二区三区不卡| 成人免费看视频| 91精品在线观看入口| 精品粉嫩aⅴ一区二区三区四区| 国产精品国产a| 久久99久久99精品免视看婷婷 | 国产乱子伦视频一区二区三区| 色av成人天堂桃色av| 精品亚洲aⅴ乱码一区二区三区| 成人h动漫精品一区二| 欧美精品黑人性xxxx| 国产精品久久久久久久久图文区 | 亚洲高清免费观看高清完整版在线观看| 美女一区二区视频| 2021中文字幕一区亚洲| 亚洲男同性恋视频| 成人久久视频在线观看| 日韩三级视频中文字幕| 亚洲影视在线观看| 国产精品99久久不卡二区| 91精品婷婷国产综合久久性色| 国产精品久久久久久久裸模| 五月天久久比比资源色| 国产一区二区视频在线| 在线看国产一区二区| 欧美精品一区二区在线播放| 日韩一区有码在线| 毛片av一区二区| 成人免费三级在线| 国产拍揄自揄精品视频麻豆| 在线视频欧美区| 日韩精品自拍偷拍| 免费国产亚洲视频| 国产不卡免费视频| 国产亚洲成年网址在线观看| 久久久精品国产免费观看同学| 蜜桃精品在线观看| 日本一区二区三区dvd视频在线| 国产一区二区三区蝌蚪| 欧美电影免费观看高清完整版在线 | 久久久精品黄色| 国内精品伊人久久久久av一坑| 国产白丝精品91爽爽久久| 国产日韩高清在线| 日韩视频在线永久播放| 另类小说一区二区三区| 欧美一级专区免费大片| 国产精品久久久久久久久免费樱桃 | 国产精品亚洲视频| 精品国产成人在线影院| 国产精品狼人久久影院观看方式| 9l国产精品久久久久麻豆| 国产乱淫av一区二区三区| 中文字幕国产一区二区| 国产精品综合二区| 国产区在线观看成人精品 | 成人av网址在线观看| 在线观看精品一区| 精品国产乱码久久久久久牛牛| 国模套图日韩精品一区二区| 91视频91自| 天天综合网 天天综合色| 美女视频黄免费的久久 | 欧洲一区在线观看| 视频一区视频二区中文字幕| 东方aⅴ免费观看久久av| 亚洲免费高清视频在线| 国产在线观看免费一区| 亚洲欧洲av在线| 韩国v欧美v日本v亚洲v| 国产精品美女一区二区三区 | 国产精品亲子伦对白| 一区二区三区国产| 日韩一区二区三区免费看| 久久国产精品露脸对白| 91精品麻豆日日躁夜夜躁| 成人久久久精品乱码一区二区三区 | 国产精品日产欧美久久久久| 欧美—级在线免费片| 日韩欧美一区二区视频| 国产成人免费高清| 精品伦理精品一区| 欧美中文字幕一区| 亚洲男人电影天堂| 国产日韩精品一区二区浪潮av| 另类中文字幕网| 亚洲国产wwwccc36天堂| 欧美国产97人人爽人人喊| 福利电影一区二区三区| 免费观看久久久4p| 欧美一区国产二区| 美女视频黄a大片欧美| 日韩一区二区三区免费看| 青娱乐精品在线视频| 欧美一区二区精品在线| 久久99九九99精品| 91猫先生在线| 洋洋av久久久久久久一区| 欧美极品另类videosde| 蜜臀91精品一区二区三区| 五月天欧美精品| 亚洲一区免费观看| 日韩精品中文字幕在线不卡尤物| 在线观看国产一区二区| 亚洲一区二区视频| 亚洲免费在线看| 亚洲男人都懂的| 中文字幕精品—区二区四季| 精品美女在线播放| 不卡视频一二三| 国产凹凸在线观看一区二区 | 亚洲欧美偷拍三级| 欧洲色大大久久| 欧洲国内综合视频| 91黄视频在线| 久久疯狂做爰流白浆xx| 久久国产夜色精品鲁鲁99| 国产欧美日韩精品一区| 欧美经典一区二区| 日本最新不卡在线| 麻豆精品视频在线观看| 美日韩一区二区| 亚洲美女区一区| 午夜在线成人av| 久久精品一区二区三区不卡牛牛 | 亚洲综合丝袜美腿| 亚洲伦在线观看| 一区二区三区四区视频精品免费 | 国产精品卡一卡二卡三| 欧美日韩美女一区二区| 激情综合网av| 成人激情文学综合网| 99久久99精品久久久久久| 美女视频一区在线观看| 国产乱人伦偷精品视频免下载 |