3分鐘學(xué)會(huì)MySQL數(shù)據(jù)庫(kù)的邏輯架構(gòu)原理
這篇文章主要是從mysql數(shù)據(jù)庫(kù)的邏輯架構(gòu)來(lái)認(rèn)識(shí)掌握mysql的原理。只要是稍微有一點(diǎn)計(jì)算機(jī)的相關(guān)知識(shí)相信都能看明白。
一、籠統(tǒng)的邏輯架構(gòu)
先給出一張邏輯架構(gòu)圖,這張圖是讓你從宏觀的角度來(lái)分析認(rèn)識(shí)一下。

從這張圖你可以獲取到如下的信息:
(1)mysql架構(gòu)大致上可以劃分為四層。
(2)第一層,主要是不同客戶端的連接。
(3)第二層,主要是處理客戶端的連接。
(4)第三層,處理客戶端的sql語(yǔ)句。
(5)第四層,存儲(chǔ)引擎真實(shí)的執(zhí)行sql語(yǔ)句。
現(xiàn)在你已經(jīng)了解了mysql的整體架構(gòu),而且也大致明白了每一層是干嘛的,現(xiàn)在我們把目光逐漸細(xì)化,畢竟上面這張圖還是太籠統(tǒng)。
二、細(xì)化的邏輯架構(gòu)圖
看下面這張圖。

這張圖相比較前面那張圖就細(xì)化了一部分,從上到下還是分為了四層,
第一層:在這里我們可以看出,連接的客戶端有很多,PHP、python、jdbc等等都有。
第二層:這一層是鏈接層,對(duì)應(yīng)于第一張圖的連接處理層,主要是處理客戶端的連接,這是因?yàn)榭蛻舳撕芏喾N類很多。
第三層:這一層是服務(wù)層。主要是處理客戶端請(qǐng)求的sql語(yǔ)句,如何處理呢?大致流程就是,先查詢緩存,如果緩存有,那就直接拿出來(lái)返回。如果沒(méi)有那就解析器解析,然后優(yōu)化器優(yōu)化,各個(gè)存儲(chǔ)引擎提供的功能都集中在這一層,如存儲(chǔ)過(guò)程,觸發(fā)器,視圖等。
第四層:這一層是引擎層,在這里我們可以看到有好幾種不同的存儲(chǔ)引擎,比如InnoDB,MyISAM,memory等等。真正負(fù)責(zé)MySQL中數(shù)據(jù)的存儲(chǔ)和提取。
假如說(shuō)我們使用jdbc執(zhí)行一條插入的sql語(yǔ)句,整個(gè)流程是如何執(zhí)行的呢?
首先,jdbc屬于第一層,通過(guò)第二層的連接處理連接到mysql服務(wù)器,接下來(lái),通過(guò)解析器對(duì)sql語(yǔ)句進(jìn)行解析,然后再通過(guò)優(yōu)化器對(duì)sql語(yǔ)句進(jìn)行優(yōu)化,最終調(diào)用第四層的存儲(chǔ)引擎的接口,執(zhí)行插入語(yǔ)句,將數(shù)據(jù)插入到文件或者是其他文件系統(tǒng)上。
是不是很簡(jiǎn)單。通常在學(xué)習(xí)mysql的時(shí)候,老師都會(huì)介紹到存儲(chǔ)引擎。那時(shí)候可能你還沒(méi)有注意到他的重要性,現(xiàn)在相信你應(yīng)該體會(huì)到了。也就是說(shuō)服務(wù)層的那些功能,都是由存儲(chǔ)引擎提供的。不同的存儲(chǔ)引擎提供的可能是不一樣的。如何去比較這些存儲(chǔ)引擎呢?我們列了一些指標(biāo)去對(duì)比一下:

對(duì)于mysql數(shù)據(jù)庫(kù)來(lái)說(shuō),默認(rèn)的就是InnoDB,它不能支持哈希索引還有全文索引。因此如果有一天你不喜歡它了也可以去更換,語(yǔ)句就是SET default_storage_engine=< 存儲(chǔ)引擎名 >。