溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MYSQL中怎么實(shí)現(xiàn)邏輯架構(gòu)和并發(fā)控制

發(fā)布時(shí)間:2021-07-13 15:29:55 來(lái)源:億速云 閱讀:150 作者:Leah 欄目:大數(shù)據(jù)

本篇文章為大家展示了MYSQL中怎么實(shí)現(xiàn)邏輯架構(gòu)和并發(fā)控制,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。


Mysql 的邏輯架構(gòu)圖如下:
MYSQL中怎么實(shí)現(xiàn)邏輯架構(gòu)和并發(fā)控制  
圖片來(lái)源:極客時(shí)間  
 
  • Server 層包括連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器等,涵蓋 MySQL 的大多數(shù)核心服務(wù)功能,


    以及所有的內(nèi)置函數(shù)(如日期、時(shí)間、數(shù)學(xué)和加密函數(shù)等),所有跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn),比如存儲(chǔ)過(guò)程、觸發(fā)器、視圖等。


  1. 連接器
    連接器負(fù)責(zé)跟客戶端建立連接、獲取權(quán)限、維持和管理連接。


  2. 查詢緩存
    MySQL 拿到一個(gè)查詢請(qǐng)求后,會(huì)先到查詢緩存看看,之前是不是執(zhí)行過(guò)這條語(yǔ)句。


    如果在緩存中,則直接返回結(jié)果。

    如果語(yǔ)句不在查詢緩存中,就會(huì)繼續(xù)后面的執(zhí)行階段,執(zhí)行完成后,執(zhí)行結(jié)果會(huì)被存入查詢緩存中。


  3. 分析器
    分析器先會(huì)做“詞法分析,語(yǔ)法分析”。


    你輸入的是由多個(gè)字符串和空格組成的一條 SQL 語(yǔ)句,MySQL 需要識(shí)別出里面的字符串分別是什么,代表什么。


  4. 優(yōu)化器
    優(yōu)化器是在表里面有多個(gè)索引的時(shí)候,決定使用哪個(gè)索引;


    或者在一個(gè)語(yǔ)句有多表關(guān)聯(lián)(join)的時(shí)候,決定各個(gè)表的連接順序。


  5. 執(zhí)行器
    執(zhí)行器開(kāi)始執(zhí)行語(yǔ)句,將結(jié)果集返回給客戶端。


  • 存儲(chǔ)引擎層負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和提取。

    其架構(gòu)模式是插件式的,支持 InnoDB、MyISAM、Memory 等多個(gè)存儲(chǔ)引擎。


    現(xiàn)在最常用的存儲(chǔ)引擎是 InnoDB,它從 MySQL 5.5.5 版本開(kāi)始成為了默認(rèn)存儲(chǔ)引擎。


并發(fā)控制

下來(lái)我們來(lái)看看Mysql在并發(fā)控制方面都有哪些特點(diǎn)。

  • 讀寫鎖


  1. 讀鎖是共享的,多個(gè)客戶端同一時(shí)間可以讀同一個(gè)資源,互補(bǔ)干擾。


  2. 寫鎖是是排他的,也就是說(shuō)一個(gè)寫鎖會(huì)阻塞其他的寫鎖和讀鎖。


  • 鎖粒度


  1. 表鎖,鎖定整張表,表鎖是server層高的鎖,該鎖會(huì)忽略存儲(chǔ)引擎的鎖機(jī)制。


  2. 行級(jí)鎖,鎖定數(shù)據(jù)行,行級(jí)鎖只在存儲(chǔ)引擎層實(shí)現(xiàn)。


  • 事務(wù)ACID


  1. 原子性(atomicity)
    一個(gè)事務(wù)必須被視為一個(gè)不可分割的最小工作單元,整個(gè)事務(wù)要么全部執(zhí)行成功,要么全部失敗回滾,不可能一部分成功,一部分失敗,這就是原子性。


  2. 一致性(consistency)
    數(shù)據(jù)庫(kù)總是從一個(gè)一致性的狀態(tài)轉(zhuǎn)換到另一個(gè)一致性的狀態(tài),例如,完整性約束了a+b=10,一個(gè)事務(wù)改變了a,那么b也應(yīng)該隨之改變。


  3. 隔離性(isolation)
    通常來(lái)說(shuō),一個(gè)事務(wù)所做的修改在最終提交以前,對(duì)其事務(wù)時(shí)不可見(jiàn)的。


  4. 持久性(durability)
    一旦事務(wù)提交,則其所做的修改就會(huì)永久的保存到數(shù)據(jù)庫(kù)中。



鎖粒度的升級(jí)和實(shí)現(xiàn)ACID特性都會(huì)增加系統(tǒng)的開(kāi)銷。

一個(gè)實(shí)現(xiàn)了ACID的數(shù)據(jù)庫(kù),相比沒(méi)有實(shí)現(xiàn)ACID的數(shù)據(jù)庫(kù),通常會(huì)需要更強(qiáng)的cup處理能力,更大的內(nèi)存,和更多的磁盤空間。

大家可以根據(jù)業(yè)務(wù)是否需要事務(wù)處理,來(lái)選擇合適的存儲(chǔ)引擎。

  • 隔離級(jí)別


  1. RED UNCOMMITTED(未提交讀)
    在RED UNCOMMITTED級(jí)別,事務(wù)中的修改,即使沒(méi)提交,對(duì)其他事務(wù)也是可見(jiàn)的。


    事務(wù)可以讀取未提交的數(shù)據(jù),這被稱為“臟讀”(Dirty Read),因?yàn)樽x取的很可能是中間過(guò)程的臟數(shù)據(jù),而不是最終數(shù)據(jù)。


  2. RED COMMITTED(提交讀)
    大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)默認(rèn)的隔離級(jí)別都是RED COMMITTED,但是MYSQL不是。


    RED COMMITTED說(shuō)的是,一個(gè)事務(wù)只能讀到其他事務(wù)已經(jīng)提交的數(shù)據(jù),所以叫提交讀。


    這個(gè)事務(wù)級(jí)別也叫做不可重復(fù)讀(nonrepeatableread),因?yàn)閮纱瓮瑯拥牟樵儯赡軙?huì)得到不同的結(jié)果。


  3. REPEATABLE READ(可重復(fù)讀)
    REPEATABLE READ解決了臟讀的問(wèn)題。


    該級(jí)別保證了在同一事務(wù)中多次讀取同樣的記錄結(jié)果是一致的。


    但是無(wú)法解決幻讀的問(wèn)題,所謂幻讀,指的是當(dāng)某個(gè)事務(wù)再讀取某個(gè)范圍內(nèi)的記錄時(shí),另外一個(gè)事務(wù)又在該范圍內(nèi)插入了新的記錄,當(dāng)之前的事務(wù)再次讀取該范圍內(nèi)的記錄時(shí),發(fā)現(xiàn)多了一行,會(huì)產(chǎn)生幻行。


  4. SERIALIZABLE(可串行化)
    SERIALIZABLE是最高級(jí)別的隔離。


    它通過(guò)強(qiáng)制事務(wù)串行執(zhí)行,避免了前面說(shuō)的幻讀的問(wèn)題。


    簡(jiǎn)單來(lái)說(shuō),SERIALIZABLE會(huì)在讀取的每一行數(shù)據(jù)上都加鎖,所以可能導(dǎo)致大量的超時(shí)和鎖爭(zhēng)用的問(wèn)題。

MYSQL中怎么實(shí)現(xiàn)邏輯架構(gòu)和并發(fā)控制

Mysql的InnoDB存儲(chǔ)引擎默認(rèn)的隔離級(jí)別的是REPEATABLE READ(可重復(fù)讀),并且通過(guò)間隙鎖(next-key locking)策略防止幻讀的出現(xiàn)。

間隙鎖使得InnoDB不僅僅鎖定查詢涉及的行,還會(huì)對(duì)索引中的間隙進(jìn)行鎖定,以防止幻行的插入。

上述內(nèi)容就是MYSQL中怎么實(shí)現(xiàn)邏輯架構(gòu)和并發(fā)控制,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI