會(huì)當(dāng)凌絕頂有额,一覽眾山小模叙。如果把在操作mysql中遇到的問題比喻成我們需要跨過去的“眾山”居暖,那么“絕頂”是什么秃踩?如果我們能找到這個(gè)“絕頂”并且登上它轩触,是不是就能順利的跨過這些“眾山”须喂,順利的解決問題喊式?
我以為mysql中的“絕頂”是mysql的的基礎(chǔ)架構(gòu)僻他,或者說任何軟件的絕頂都是它的基礎(chǔ)架構(gòu)笆包。只要弄清楚基礎(chǔ)架構(gòu)环揽,并在分析問題的過程中牢牢的抓住基礎(chǔ)架構(gòu),從基礎(chǔ)架構(gòu)出發(fā)來分析問題庵佣,就更容易定位問題歉胶,找到解決問題的方法。
那么基礎(chǔ)架構(gòu)是什么呢巴粪,說的再直白一點(diǎn)通今,我認(rèn)為就是軟件里面分了幾個(gè)層,每層里面分了幾個(gè)模塊肛根,這些層和模塊的功能是什么辫塌,是怎么流轉(zhuǎn)的。有大牛說過“計(jì)算機(jī)科學(xué)領(lǐng)域的任何問題都可以通過增加一個(gè)間接的中間層來解決(Any problem in computer science can be solved by anther layer of indirection)”派哲。既然中間層已經(jīng)成為軟件設(shè)計(jì)中的共識(shí)璃氢,那么我們學(xué)習(xí)一個(gè)軟件的時(shí)候狮辽,如果能先從分層的角度來考慮,也許可以快速的掌握一個(gè)軟件的全貌椰苟。
具體到msyql來說树叽,mysql分了幾個(gè)層,每個(gè)層里有哪些模塊呢?根據(jù)極客時(shí)間的專欄<mysql實(shí)戰(zhàn)45講>的講解层皱,我覺得mysql分成了server層和存儲(chǔ)引擎兩個(gè)層赠潦。server層是通用的(只有一種),負(fù)責(zé)數(shù)據(jù)操作的前期準(zhǔn)備工作瓮增,存儲(chǔ)引擎是插件式的(有多種)哩俭,負(fù)責(zé)存儲(chǔ)數(shù)據(jù),提供數(shù)據(jù)的讀寫接口凡资。mysql支持多種存儲(chǔ)引擎,比如最常使用的InnoDB,還有MyISAM,Memory等多種存儲(chǔ)引擎垦藏。
server層包括連接器鸳谜,分析器咐扭,優(yōu)化器滑废,執(zhí)行器四個(gè)模塊。每個(gè)模塊負(fù)責(zé)獨(dú)立的一塊功能蠕趁。連接器負(fù)責(zé)管理連接,權(quán)限驗(yàn)證豁延;分析器負(fù)責(zé)詞法分析腊状,語法分析;優(yōu)化器負(fù)責(zé)執(zhí)行計(jì)劃生成缴挖,索引選擇;執(zhí)行器負(fù)責(zé)和存儲(chǔ)引擎交互苟鸯,返回結(jié)果。