共計 1954 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章主要介紹 MySql 整體結(jié)構(gòu)的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
MySql 整體結(jié)構(gòu)
MySQL 由連接池、SQL 接口、解析器、優(yōu)化器、緩存、存儲引擎等組成,可以分為三層,即 MySQL Server 層、存儲引擎層和文件系統(tǒng)層。MySQL Server 層又包括連接層和 SQL 層。如下是官方文檔中 MySQL 的基礎(chǔ)架構(gòu)圖:
上圖中,Connection pool 為連接層,Management Services Utilities …Caches Buffers 為 SQL 層,Pluggable Storage Engines 為存儲引擎層,F(xiàn)ile system、Files Logs 為文件系統(tǒng)層。
Connectors 不屬于以上任何一層,可以將 Connectors 理解為各種客戶端、應(yīng)用服務(wù),主要指的是不同語言與 SQL 的交互。
1. 連接層
應(yīng)用程序通過接口(如 ODBC、JDBC)來連接 MySQL,最先連接處理的是連接層。連接層包括通信協(xié)議、線程處理、用戶名密碼認證 3 部分。
通信協(xié)議負責檢測客戶端版本是否兼容 MySQL 服務(wù)端。
- 線程處理是指每一個連接請求都會分配一個對應(yīng)的線程,相當于一條 SQL 對應(yīng)一個線程,一個線程對應(yīng)一個邏輯 CPU,在多個邏輯 CPU 之間進行切換。
- 密碼認證用來驗證用戶創(chuàng)建的賬號、密碼,以及 host 主機授權(quán)是否可以連接到 MySQL 服務(wù)器。
Connection Pool(連接池)屬于連接層。由于每次建立連接都需要消耗很多時間,連接池的作用就是將用戶連接、用戶名、密碼、權(quán)限校驗、線程處理等需要緩存的需求緩存下來,下次可以直接用已經(jīng)建立好的連接,提升服務(wù)器性能。
2. SQL 層
SQL 層是 MySQL 的核心,MySQL 的核心服務(wù)都是在這層實現(xiàn)的。主要包含權(quán)限判斷、查詢緩存、解析器、預處理、查詢優(yōu)化器、緩存和執(zhí)行計劃。
權(quán)限判斷可以審核用戶有沒有訪問某個庫、某個表,或者表里某行數(shù)據(jù)的權(quán)限。
查詢緩存通過 Query Cache 進行操作,如果數(shù)據(jù)在 Query Cache 中,則直接返回結(jié)果給客戶端,不必再進行查詢解析、優(yōu)化和執(zhí)行等過程。
查詢解析器針對 SQL 語句進行解析,判斷語法是否正確。
預處理器對解析器無法解析的語義進行處理。
查詢優(yōu)化器對 SQL 進行改寫和相應(yīng)的優(yōu)化,并生成最優(yōu)的執(zhí)行計劃,就可以調(diào)用程序的 API 接口,通過存儲引擎層訪問數(shù)據(jù)。
Management Services Utilities、SQL Interface、Parser、Optimizer 和 Caches Buffers 屬于 SQL 層,詳細說明如下表所示。
名稱說明 Management Services UtilitiesMySQL 的系統(tǒng)管理和控制工具,包括備份恢復、MySQL 復制、集群等。SQL Interface(SQL 接口)用來接收用戶的 SQL 命令,返回用戶需要查詢的結(jié)果。例如 SELECT FROM 就是調(diào)用 SQL Interface。Parser(查詢解析器)在 SQL 命令傳遞到解析器的時候會被解析器驗證和解析,以便 MySQL 優(yōu)化器可以識別的數(shù)據(jù)結(jié)構(gòu)或返回 SQL 語句的錯誤。Optimizer(查詢優(yōu)化器)SQL 語句在查詢之前會使用查詢優(yōu)化器對查詢進行優(yōu)化,同時驗證用戶是否有權(quán)限進行查詢,緩存中是否有可用的最新數(shù)據(jù)。它使用“選取 - 投影 - 連接”策略進行查詢。例如 SELECT id, name FROM student WHERE gender = 女 語句中,SELECT 查詢先根據(jù) WHERE 語句進行選取,而不是將表全部查詢出來以后再進行 gender 過濾。SELECT 查詢先根據(jù) id 和 name 進行屬性投影,而不是將屬性全部取出以后再進行過濾,將這兩個查詢條件連接起來生成最終查詢結(jié)果。Caches Buffers(查詢緩存)如果查詢緩存有命中的查詢結(jié)果,查詢語句就可以直接去查詢緩存中取數(shù)據(jù)。這個緩存機制是由一系列小緩存組成的,比如表緩存、記錄緩存、key 緩存、權(quán)限緩存等。
3. 存儲引擎層
Pluggable Storage Engines 屬于存儲引擎層。存儲引擎層是 MySQL 數(shù)據(jù)庫區(qū)別于其他數(shù)據(jù)庫最核心的一點,也是 MySQL 最具特色的一個地方。主要負責 MySQL 中數(shù)據(jù)的存儲和提取。
因為在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型).
4. 文件系統(tǒng)層
文件系統(tǒng)層主要是將數(shù)據(jù)庫的數(shù)據(jù)存儲在操作系統(tǒng)的文件系統(tǒng)之上,并完成與存儲引擎的交互。
文件系統(tǒng)層主要是將數(shù)據(jù)庫的數(shù)據(jù)存儲在操作系統(tǒng)的文件系統(tǒng)之上,并完成與存儲引擎的交互。
以上是“MySql 整體結(jié)構(gòu)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!
向 AI 問一下細節(jié)