學(xué)習(xí) MySQL 的整體架構(gòu)之前,我們先了解一下如何設(shè)計(jì)一個(gè)關(guān)系型數(shù)據(jù);我們?cè)O(shè)計(jì)數(shù)據(jù)庫的時(shí)候扒磁,主要需要考慮兩個(gè)核心內(nèi)容袱箱,第一個(gè)是數(shù)據(jù)的存儲(chǔ)位置【磁盤或固態(tài)硬盤等】遏乔,第二個(gè)是提供程序?qū)嵗僮飨鄳?yīng)的數(shù)據(jù)
其中最重要的是如何設(shè)計(jì)操作數(shù)據(jù)的程序发笔,具體設(shè)計(jì)如下圖
MySQL 整體架構(gòu)分為三層盟萨,分別是【客戶端層】、【服務(wù)層】了讨、【存儲(chǔ)引擎層】鸯旁;下面將分別介紹各個(gè)層級(jí)的作用
客戶端層
任何系統(tǒng)都要提供對(duì)外服務(wù)的接口,MySQL 也不例外量蕊;這一層代表了各種可以通過 MySQL 連接協(xié)議連接到 MySQL 的客戶端铺罢。
這一層主要完成的是連接的處理、授權(quán)認(rèn)證残炮、安全等功能韭赘。【驗(yàn)證賬戶势就、密碼泉瞻、HostName】
每個(gè)連接到 MySQL 的客戶端都會(huì)在服務(wù)器的進(jìn)程中擁有一個(gè)線程,這個(gè)連接的查詢只會(huì)在這個(gè)登陸的線程中執(zhí)行苞冯。
我們常用的客戶端有 Java 袖牙、PHP、JDBC舅锄、ODBC等
1)連接處理
當(dāng)一個(gè)客戶端向服務(wù)端發(fā)送連接請(qǐng)求后鞭达,MySQL 服務(wù)器 會(huì)從線程池中分配一個(gè)線程來和客戶端進(jìn)行連接,以后該客戶端的請(qǐng)求都會(huì)被分配到該線程上。MySQL Server為了提高性能畴蹭,提供了線程池坦仍,減少了創(chuàng)建線程和釋放線程所花費(fèi)的時(shí)間。
2)用戶鑒權(quán)
當(dāng)客戶端向MySQL服務(wù)端發(fā)起連接請(qǐng)求后叨襟,MySQL server會(huì)對(duì)發(fā)起連接的用戶進(jìn)行鑒權(quán)處理繁扎,MySQL鑒權(quán)依據(jù)是: 用戶名,客戶端主機(jī)地址和用戶密碼
3)安全
當(dāng)客戶連接到MySQL server后糊闽,MySQL server會(huì)檢測(cè)用戶有哪些可執(zhí)行的權(quán)限
服務(wù)層
大多數(shù)的MySQL 核心服務(wù)都在這一層梳玫,包含有連接管理組件、查詢緩存組件右犹、查詢解析器組件提澎、查詢優(yōu)化器組件、SQL 接口定義組件傀履、系統(tǒng)管理組件虱朵。系統(tǒng)所有的跨存儲(chǔ)引擎層的功能都是在這一層實(shí)現(xiàn)的,因?yàn)檫@一層被稱為 MySQL 服務(wù)器钓账,這一層實(shí)現(xiàn)了所有與存儲(chǔ)引擎無關(guān)的特性碴犬;
所謂與存儲(chǔ)引擎無關(guān)的特性是指:諸如我們的SELECT
語句,他對(duì)于所有的存儲(chǔ)引擎來說梆暮,都是獲取數(shù)據(jù)服协,并依據(jù)我們的條件語句過濾數(shù)據(jù),并顯示給用戶啦粹,這個(gè)SELECT
的接口定義是在我們的服務(wù)層偿荷,但是具體如何從文件中獲取數(shù)據(jù),完全取決于存儲(chǔ)引擎層的實(shí)現(xiàn)
1)查詢緩存
緩存查詢的數(shù)據(jù)
2)查詢解析器
通過檢查SQL查詢中的每個(gè)字符來檢查SQL語法唠椭,并為每個(gè)SQL查詢生成SQL_ID跳纳,如果語句語法有錯(cuò)誤,則返回相應(yīng)的錯(cuò)誤信息贪嫂。語法檢查通過后寺庄,解析器會(huì)查詢緩存,如果緩存中有對(duì)應(yīng)的語句力崇,就直接返回結(jié)果不進(jìn)行接下來的優(yōu)化執(zhí)行操作斗塘。
3)查詢優(yōu)化器
根據(jù)存儲(chǔ)引擎創(chuàng)建有效的查詢執(zhí)行計(jì)劃。它將重寫一個(gè)查詢亮靴。例如:InnoDB共享緩沖區(qū)馍盟,優(yōu)化器將從它得到預(yù)緩存的數(shù)據(jù)。使用表統(tǒng)計(jì)信息優(yōu)化器將為SQL查詢生成執(zhí)行計(jì)劃茧吊。它的作用主要是對(duì)查詢語句進(jìn)行優(yōu)化贞岭,包括選擇合適的索引八毯,數(shù)據(jù)的讀取方式。
4)SQL接口組件
接收 SQL 進(jìn)行處理曹步,得到用戶所需要的結(jié)果宪彩,通過包含DDL休讳、DML讲婚、存儲(chǔ)過程【不用】、觸發(fā)器等
5)系統(tǒng)管理組件
提供【數(shù)據(jù)庫備份和恢復(fù)】俊柔、【數(shù)據(jù)庫安全管理筹麸,如用戶及權(quán)限管理】、【數(shù)據(jù)庫復(fù)制管理】雏婶、【數(shù)據(jù)庫集群管理】物赶、【數(shù)據(jù)庫分區(qū),分庫留晚,分表管理】
存儲(chǔ)引擎
存儲(chǔ)引擎的主要功能是存儲(chǔ)數(shù)據(jù)酵紫、為存儲(chǔ)的數(shù)據(jù)建立插入、刪除错维、修改奖地、查詢的功能
后續(xù)會(huì)單獨(dú)分析 MySQL 常用的存儲(chǔ)引擎 MyISM、Inndb