詳解MySql 整體結(jié)構(gòu)

詳解MySql 整體結(jié)構(gòu)

mysql 整體結(jié)構(gòu)

MySQL 由連接池、SQL 接口、解析器、優(yōu)化器、緩存、存儲(chǔ)引擎等組成,可以分為三層,即 MySQL Server 層、存儲(chǔ)引擎層和文件系統(tǒng)層。MySQL Server 層又包括連接層和 SQL 層。如下是官方文檔中 MySQL 的基礎(chǔ)架構(gòu)圖:

詳解MySql 整體結(jié)構(gòu)

上圖中,Connection pool 為連接層,Management Services & Utilities …Caches & Buffers 為 SQL 層,Pluggable Storage Engines 為存儲(chǔ)引擎層,F(xiàn)ile system、Files & Logs 為文件系統(tǒng)層。

Connectors 不屬于以上任何一層,可以將 Connectors 理解為各種客戶端、應(yīng)用服務(wù),主要指的是不同語(yǔ)言與 SQL 的交互。

相關(guān)免費(fèi)學(xué)習(xí)推薦:mysql視頻教程

1. 連接層

應(yīng)用程序通過(guò)接口(如 ODBC、JDBC)來(lái)連接 MySQL,最先連接處理的是連接層。連接層包括通信協(xié)議、線程處理、用戶名密碼認(rèn)證 3 部分。

  • 通信協(xié)議負(fù)責(zé)檢測(cè)客戶端版本是否兼容 MySQL 服務(wù)端。
    -線程處理是指每一個(gè)連接請(qǐng)求都會(huì)分配一個(gè)對(duì)應(yīng)的線程,相當(dāng)于一條 SQL 對(duì)應(yīng)一個(gè)線程,一個(gè)線程對(duì)應(yīng)一個(gè)邏輯 CPU,在多個(gè)邏輯 CPU 之間進(jìn)行切換。
    -密碼認(rèn)證用來(lái)驗(yàn)證用戶創(chuàng)建的賬號(hào)、密碼,以及 host 主機(jī)授權(quán)是否可以連接到 MySQL 服務(wù)器。

Connection Pool(連接池)屬于連接層。由于每次建立連接都需要消耗很多時(shí)間,連接池的作用就是將用戶連接、用戶名、密碼、權(quán)限校驗(yàn)、線程處理等需要緩存的需求緩存下來(lái),下次可以直接用已經(jīng)建立好的連接,提升服務(wù)器性能。

2. SQL層

SQL 層是 MySQL 的核心,MySQL 的核心服務(wù)都是在這層實(shí)現(xiàn)的。主要包含權(quán)限判斷、查詢緩存、解析器、預(yù)處理、查詢優(yōu)化器、緩存和執(zhí)行計(jì)劃。

  • 權(quán)限判斷可以審核用戶有沒(méi)有訪問(wèn)某個(gè)庫(kù)、某個(gè)表,或者表里某行數(shù)據(jù)的權(quán)限。
  • 查詢緩存通過(guò) Query Cache 進(jìn)行操作,如果數(shù)據(jù)在 Query Cache 中,則直接返回結(jié)果給客戶端,不必再進(jìn)行查詢解析、優(yōu)化和執(zhí)行等過(guò)程。
  • 查詢解析器針對(duì) SQL 語(yǔ)句進(jìn)行解析,判斷語(yǔ)法是否正確。
  • 預(yù)處理器對(duì)解析器無(wú)法解析的語(yǔ)義進(jìn)行處理。
  • 查詢優(yōu)化器對(duì) SQL 進(jìn)行改寫(xiě)和相應(yīng)的優(yōu)化,并生成最優(yōu)的執(zhí)行計(jì)劃,就可以調(diào)用程序的 API 接口,通過(guò)存儲(chǔ)引擎層訪問(wèn)數(shù)據(jù)。

Management Services & Utilities、SQL Interface、Parser、Optimizer 和 Caches & Buffers 屬于 SQL 層,詳細(xì)說(shuō)明如下表所示。

名稱 說(shuō)明
Management Services & Utilities MySQL 的系統(tǒng)管理和控制工具,包括備份恢復(fù)、MySQL 復(fù)制、集群等。
SQL Interface(SQL 接口) 用來(lái)接收用戶的 SQL 命令,返回用戶需要查詢的結(jié)果。例如 select FROM 就是調(diào)用 SQL Interface。
Parser(查詢解析器) 在 SQL 命令傳遞到解析器的時(shí)候會(huì)被解析器驗(yàn)證和解析,以便 MySQL 優(yōu)化器可以識(shí)別的數(shù)據(jù)結(jié)構(gòu)或返回 SQL 語(yǔ)句的錯(cuò)誤。
Optimizer(查詢優(yōu)化器) SQL 語(yǔ)句在查詢之前會(huì)使用查詢優(yōu)化器對(duì)查詢進(jìn)行優(yōu)化,同時(shí)驗(yàn)證用戶是否有權(quán)限進(jìn)行查詢,緩存中是否有可用的最新數(shù)據(jù)。它使用“選取-投影-連接”策略進(jìn)行查詢。例如 SELECT id, name FROM student WHERE gender = “女”;語(yǔ)句中,SELECT 查詢先根據(jù) WHERE 語(yǔ)句進(jìn)行選取,而不是將表全部查詢出來(lái)以后再進(jìn)行 gender 過(guò)濾。SELECT 查詢先根據(jù) id 和 name 進(jìn)行屬性投影,而不是將屬性全部取出以后再進(jìn)行過(guò)濾,將這兩個(gè)查詢條件連接起來(lái)生成最終查詢結(jié)果。
Caches & Buffers(查詢緩存) 如果查詢緩存有命中的查詢結(jié)果,查詢語(yǔ)句就可以直接去查詢緩存中取數(shù)據(jù)。這個(gè)緩存機(jī)制是由一系列小緩存組成的,比如表緩存、記錄緩存、key 緩存、權(quán)限緩存等。

3. 存儲(chǔ)引擎層

Pluggable Storage Engines 屬于存儲(chǔ)引擎層。存儲(chǔ)引擎層是 MySQL 數(shù)據(jù)庫(kù)區(qū)別于其他數(shù)據(jù)庫(kù)最核心的一點(diǎn),也是 MySQL 最具特色的一個(gè)地方。主要負(fù)責(zé) MySQL 中數(shù)據(jù)的存儲(chǔ)和提取。

因?yàn)樵陉P(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)的存儲(chǔ)是以表的形式存儲(chǔ)的,所以存儲(chǔ)引擎也可以稱為表類型(即存儲(chǔ)和操作此表的類型).

4. 文件系統(tǒng)層

文件系統(tǒng)層主要是將數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)在操作系統(tǒng)的文件系統(tǒng)之上,并完成與存儲(chǔ)引擎的交互。

文件系統(tǒng)層主要是將數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)在操作系統(tǒng)的文件系統(tǒng)之上,并完成與存儲(chǔ)引擎的交互。

更多相關(guān)免費(fèi)學(xué)習(xí)推薦:mysql教程(視頻)

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享