本篇文章為大家展示了如何理解邏輯架構(gòu)和InnoDB存儲(chǔ)引擎,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、于都網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、于都網(wǎng)絡(luò)營(yíng)銷、于都企業(yè)策劃、于都品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供于都建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
一、MySQL邏輯架構(gòu)
1、邏輯架構(gòu)圖
基于下面的邏輯架構(gòu)圖,可以大致熟悉MySQL各個(gè)架構(gòu)組件之間的協(xié)同工作關(guān)系。
很經(jīng)典的C/S架構(gòu)風(fēng)格,即客戶端/服務(wù)端模式。
2、分層描述
客戶端連接
通常會(huì)進(jìn)行連接池管理,連接用戶權(quán)限認(rèn)證,安全管理等操作。
可以通過(guò)如下命令查看連接配置信息:SHOW VARIABLES LIKE '%connect%';可以看到最大連接和每個(gè)連接占用的內(nèi)存等相關(guān)配置。
核心功能
第二層架構(gòu)封裝MySQL一系列核心操作,查詢解析、優(yōu)化、緩存、內(nèi)置函數(shù)、觸發(fā)器、視圖等,跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn)。
存儲(chǔ)引擎
MySQL的最底層封裝,也是最核心的功能,不同的存儲(chǔ)引擎有不同的特點(diǎn)功能,共同點(diǎn)是處理數(shù)據(jù)的存儲(chǔ)和提取。
二、概念簡(jiǎn)介
1、存儲(chǔ)引擎
MySQL數(shù)據(jù)庫(kù)存儲(chǔ)引擎是數(shù)據(jù)庫(kù)底層的架構(gòu)組件,數(shù)據(jù)庫(kù)管理系統(tǒng)使用數(shù)據(jù)引擎進(jìn)行創(chuàng)建、查詢、更新和刪除數(shù)據(jù)操作。不同的存儲(chǔ)引擎提供不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平等功能,使用不同的存儲(chǔ)引擎還具有不同的特點(diǎn)功能,以滿足不同場(chǎng)景下的業(yè)務(wù)需求。
2、支持關(guān)系
可以通過(guò)下面兩個(gè)命令查看MySQL當(dāng)前版本,和對(duì)存儲(chǔ)引擎的支持情況。
SELECT VERSION() ; SHOW ENGINES ;
可以看出本地環(huán)境是MySQL5.7,支持如下幾種存儲(chǔ)引擎:
該版本下默認(rèn)的存儲(chǔ)引擎是:InnoDB,功能最為豐富和強(qiáng)大,支持事務(wù),分布式事務(wù),事務(wù)保存點(diǎn)。
三、常見(jiàn)存儲(chǔ)引擎
1、InnoDB引擎
(1)、基本描述
InnoDB引擎是MySQL默認(rèn)的事務(wù)型引擎,使用非常廣泛,極擅長(zhǎng)處理短期事務(wù),具有自動(dòng)崩潰恢復(fù)的特性,在日常開(kāi)發(fā)中,一般都要求使用該引擎。
(2)、架構(gòu)圖解
InnoDB架構(gòu)圖
該圖片來(lái)自MySQL官網(wǎng)文檔。
整體分三層:內(nèi)存結(jié)構(gòu),Cache,磁盤結(jié)構(gòu)。
內(nèi)存結(jié)構(gòu)
內(nèi)存結(jié)構(gòu)又包括四大組件
Buffer Pool:緩沖池:是主內(nèi)存中的一個(gè)區(qū)域,在InnoDB訪問(wèn)表和索引數(shù)據(jù)時(shí)會(huì)在其中進(jìn)行高速緩存,大量減少磁盤IO操作,提升效率。
Change Buffer:寫緩沖區(qū):避免每次增刪改都進(jìn)行IO操作,提升性能。
Adaptive Hash Index:自適應(yīng)哈希索引:使用索引關(guān)鍵字的前綴構(gòu)建哈希索引,提升查詢速度。
Log Buffer:日志緩沖區(qū):保存要寫入磁盤上的日志文件的數(shù)據(jù),緩沖區(qū)的內(nèi)容定期刷新到磁盤。
磁盤結(jié)構(gòu)
Tables:數(shù)據(jù)表的物理結(jié)構(gòu)。
Indexes:索引的物理結(jié)構(gòu)。
Tablespaces:表空間,數(shù)據(jù)存儲(chǔ)區(qū)域。
Data Dictionary:數(shù)據(jù)字典,存儲(chǔ)元數(shù)據(jù)信息的表,例如表的描述,結(jié)構(gòu),索引等。
Doublewrite Buffer:位于系統(tǒng)表空間的一個(gè)存儲(chǔ)區(qū)域,InnoDB在BufferPool中刷新頁(yè)面時(shí),會(huì)將數(shù)據(jù)頁(yè)寫入該緩沖區(qū)后才會(huì)寫入磁盤。
Redo Log:記錄DML操作的日志,用來(lái)崩潰后的數(shù)據(jù)恢復(fù)。
Undo Logs:數(shù)據(jù)更改前的快照,可以用來(lái)回滾數(shù)據(jù)。
(3)、特點(diǎn)描述
支持事務(wù)
事務(wù)內(nèi)在執(zhí)行一組SQL語(yǔ)句時(shí),要么全部成功,要么全部失敗。
支持分布式事務(wù)
分布式事務(wù)指即使不同操作位于不同的服務(wù)應(yīng)用上,仍然需要保證事務(wù)的特性。常見(jiàn)場(chǎng)景:訂單和庫(kù)存在不同的服務(wù)中,但卻能保持一致性。
支持行級(jí)鎖
加鎖時(shí)鎖定一行數(shù)據(jù)的鎖機(jī)制就是行級(jí)別鎖定(row-level)。MySQL5.7版本中只有InnoDB引擎支持。鎖定的粒度小,自然支持的并發(fā)就高,鎖定的機(jī)制也隨之變的復(fù)雜。
支持MVCC
多版本并發(fā)控制,通過(guò)保存數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)的快照來(lái)實(shí)現(xiàn)的。這意味著一個(gè)事務(wù)無(wú)論運(yùn)行多長(zhǎng)時(shí)間,在同一個(gè)事務(wù)里能夠看到數(shù)據(jù)一致的視圖。根據(jù)事務(wù)開(kāi)始的時(shí)間不同,同時(shí)也意味著在同一個(gè)時(shí)刻不同事務(wù)看到的相同表里的數(shù)據(jù)可能是不同的。
支持聚簇索引
是一種對(duì)磁盤上實(shí)際數(shù)據(jù)重新組織以按指定的一個(gè)或多個(gè)列的值排序。由于聚簇索引的索引頁(yè)面指針指向數(shù)據(jù)頁(yè)面,所以使用聚簇索引查找數(shù)據(jù)幾乎總是比使用非聚簇索引快。
2、MyISAM引擎
(1)、基礎(chǔ)描述
MySQL5.1和之前版本的默認(rèn)存儲(chǔ)引擎,不支持事務(wù)和行級(jí)鎖,自然崩潰之后不能自動(dòng)恢復(fù)。
(2)、特點(diǎn)描述
鎖表機(jī)制
對(duì)整張表加鎖,不針對(duì)行加鎖,讀數(shù)據(jù)加共享鎖,寫數(shù)據(jù)加排他鎖。
全文索引
支持全文索引,一種基于分詞創(chuàng)建的索引,可以支持復(fù)雜的檢索查詢。
3、其他引擎
在MySQL的體系中,最常使用的就是InnoDB和MyISAM引擎,其他多樣的存儲(chǔ)引擎可以根據(jù)業(yè)務(wù)需求再去熟悉。
絮叨一句:人生苦短,編程語(yǔ)言更是五馬六路,這點(diǎn)令人煩躁,所以學(xué)習(xí)的時(shí)候要挑重點(diǎn),什么是重點(diǎn),使用最多的就是重點(diǎn)內(nèi)容。
四、存儲(chǔ)引擎選擇
在公司的開(kāi)發(fā)規(guī)范中,一般硬性要求使用InnoDB引擎,除非有怪癖的業(yè)務(wù)InnoDB無(wú)法支持。
上述內(nèi)容就是如何理解邏輯架構(gòu)和InnoDB存儲(chǔ)引擎,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。