上圖(圖是百度找的)
mysql邏輯架構(gòu):連接層碎乃、服務(wù)層姊扔、引擎層、存儲層梅誓,四層恰梢。
Connectors
連接,指不同語言與數(shù)據(jù)庫的交互证九,比如:java里的JDBC
Management Serveices & Utilities
系統(tǒng)管理和控制工具
Connection Pool
連接池删豺,管理緩沖用戶連接,線程處理等需要緩存的需求愧怜。負責(zé)監(jiān)聽對MySQL Server的各種請求,接收連接請求妈拌,轉(zhuǎn)發(fā)所有連接請求到線程管理模塊拥坛。每一個連接上MySQL Server的客戶端請求都會被分配(或創(chuàng)建)一個連接線程為其單獨服務(wù)。而連接線程的主要工作就是負責(zé)MySQL Server與客戶端的通信尘分,接收客戶端的命令請求猜惋,傳遞Server端的結(jié)果信息等。線程管理模塊則負責(zé)管理維護這些連接線程培愁。包括線程的創(chuàng)建著摔,線程的cache等。
SQL Interface
SQL接口定续,接受用戶的SQL命令谍咆,并且返回用戶需要查詢的結(jié)果禾锤。
Parser
解析器,SQL命令傳遞到解析器的時候會被解析器驗證和解析摹察《髦溃可以理解為過濾器,對不同的Query進行分類供嚎、篩選黄娘,比如:insert、selcet克滴、del等將SQL語句進行語義和語法的分析逼争,分解成數(shù)據(jù)結(jié)構(gòu),按照不同的操作類型進行分類劝赔,然后做出針對性的轉(zhuǎn)發(fā)到后續(xù)步驟誓焦。SQL語句的傳遞和處理就是基于這個結(jié)構(gòu)。
Optimizer
查詢優(yōu)化器望忆,SQL語句在查詢之前會使用查詢優(yōu)化器對查詢進行優(yōu)化罩阵。及優(yōu)化客戶端請求的query(sql語句),根據(jù)客戶端請求的query語句启摄,和數(shù)據(jù)庫中的一些統(tǒng)計信息稿壁,在一系列算法的基礎(chǔ)上進行分析,得出一個最優(yōu)的策略歉备,告訴后面的程序如何去得這個query語句的結(jié)果傅是。
他使用的是“選取-投影-聯(lián)接”策略進行查詢。
select uid,name from user where gender = 1;
其查詢過程蕾羊,先將where的篩選條件提出 (gender = 1)喧笔,然后將表中的需要查詢的數(shù)據(jù)提出(uid,name)組成新的映射表龟再,最后通過篩選條件篩選映射表生成最后結(jié)果书闸。
Cache和Buffer
查詢緩存,主要功能將客戶端提交給MySQL的Select 類 query 請求的返回結(jié)果集緩存到內(nèi)存中利凑,與該query的一個hash值做一個對應(yīng)浆劲。如果該query的基表發(fā)生了數(shù)據(jù)變化,MySQL就會自動使該query的cache失效哀澈,并重新生成牌借。
優(yōu)點:提高性能;缺點:內(nèi)存消耗大割按。
Pluggable Storage Engines
mysql中存儲引擎是可插拔的膨报,及插件式管理。存儲引擎是基于表的,而不是數(shù)據(jù)庫现柠。此模塊實際上是一個抽象類院领,但正因為它成功地將各種數(shù)據(jù)處理高度抽象化,才成就今天MySQL可插拔存儲引擎的特色晒旅。
mysql有十幾種存儲引擎栅盲,常用的有:Innodb、Myisam等废恋。不同的存儲引擎抽象數(shù)據(jù)的算法也不盡相同谈秫。比如:Innodb底層使用的B+樹,而Myisam則使用的B-樹等鱼鼓。
只有了解mysql的系統(tǒng)架構(gòu)拟烫,才能更好的去了解深入的原理、算法等迄本。比如:如果mysql性能下降硕淑,到底是什么導(dǎo)致的呢?是那一層的問題嘉赎?是哪一個組件的問題置媳?確定了位置,我們才好去確定具體的解決方案和措施公条。
閱讀文章:
https://www.cnblogs.com/andy6/p/5789254.html
https://juejin.im/post/59ec528bf265da43333d8bb0#heading-1