共計 3045 個字符,預計需要花費 8 分鐘才能閱讀完成。
本篇內容主要講解“MySQL 的邏輯架構及工作流程是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“MySQL 的邏輯架構及工作流程是什么”吧!
MySql 并不完美,但是卻足夠靈活,能夠適應高要求的環境。同時,MySql 既可以嵌入到應用程序中,也可以支持數據倉庫、內容索引和部署軟件、高可用的冗余系統、在線事務處理系統等各種應用類型。
為了更心如的理解 MySql 服務器,我們需要理解 MySql 各部件之間如何協同工作。需要我們去理解它的邏輯架構。
下面我們就來介紹一下 MySql 的邏輯架構:
MySQL 的邏輯架構
MySQL 的最重要、最與眾不同的特性就是它的存儲引擎架構,這種架構將查詢處理以及其他系統任務和數據的存儲 / 提取相分離。
所帶來的好處就是可以在使用時根據性能、特性,以及其他需求來選擇數據存儲的方式。
下圖就是 MySQL 的邏輯架構圖:
MySQL 架構總共三層,在上圖中以虛線作為劃分。
首先,最上層的服務并不是 MySQL 獨有的,大多數給予網絡的客戶端 / 服務器的工具或者服務都有類似的架構。比如:連接處理、授權認證、安全等。
第二層的架構包括大多數的 MySQL 的核心服務。包括:查詢解析、分析、優化、緩存以及所有的內置函數(例如:日期、時間、數學和加密函數)。同時,所有的跨存儲引擎的功能都在這一層實現:存儲過程、觸發器、視圖等。
第三層包含了存儲引擎。存儲引擎負責 MySQL 中數據的存儲和提取。服務器通過 API 和存儲引擎進行通信。這些接口屏蔽了不同存儲引擎之間的差異,使得這些差異對上層的查詢過程透明化。存儲引擎 API 包含十幾個底層函數,用于執行“開始一個事務”等操作。但存儲引擎一般不會去解析 SQL(InnoDB 會解析外鍵定義,因為其本身沒有實現該功能),不同存儲引擎之間也不會相互通信,而只是簡單的響應上層的服務器請求。
更加詳細的 MySQL 系統架構圖
看完上圖后,大家是不是覺得 MySQL 的系統架構挺簡單的?其實不然。
上圖只是 MySQL 系統架構的大的模塊圖,其實每一層的結構都相當復雜,下圖就是詳細模塊圖:
首先,我們對該圖中的各個模塊做一簡單介紹:
1、Connectors
指的是不同語言中與 SQL 的交互。
2、Connection Pool
管理緩沖用戶連接,線程處理等需要緩存的需求。負責監聽對 MySQL Server 的各種請求,接收連接請求,轉發所有連接請求到線程管理模塊。每一個連接上 MySQL Server 的客戶端請求都會被分配(或創建)一個連接線程為其單獨服務。而連接線程的主要工作就是負責 MySQL Server 與客戶端的通信,接受客戶端的命令請求,傳遞 Server 端的結果信息等。線程管理模塊則負責管理維護這些連接線程。包括線程的創建,線程的 cache 等。
3、Management Serveices Utilities
系統管理和控制工具。
4、SQL Interface
接受用戶的 SQL 命令,并且返回用戶需要查詢的結果。
5、Parser
SQL 命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由 Lex 和 YACC 實現的,是一個很長的腳本。在 MySQL 中我們習慣將所有 Client 端發送給 Server 端的命令都稱為 query,在 MySQL Server 里面,連接線程接收到客戶端的一個 Query 后,會直接將該 query 傳遞給專門負責將各種 Query 進行分類然后轉發給各個對應的處理模塊。
主要功能:
a、將 SQL 語句進行語義和語法的分析,分解成數據結構,然后按照不同的操作類型進行分類,然后做出針對性的轉發到后續步驟,以后 SQL 語句的傳遞和處理就是基于這個結構的;
b、如果在分解構成中遇到錯誤,那么就說明這個 sql 語句是不合理的。
6、Optimizer
查詢優化器:SQL 語句在查詢之前會使用查詢優化器對查詢進行優化。就是優化客戶端請求 query,根據客戶端請求的 query 語句,和數據庫中的一些統計信息,在一系列算法的基礎上進行分析,得出一個最優的策略,告訴后面的程序如何取得這個 query 語句的結果。
使用的是“選取 - 投影 - 聯接”策略進行查詢:
用一個例子就可以理解:select uid,name from user where gender = 1;
這個 select 查詢先根據 where 語句進行選取,而不是先將表全部查詢出來以后再進行 gender 過濾;然后根據 uid 和 name 進行屬性投影,而不是將屬性全部取出以后再進行過濾。最后將這兩個查詢條件聯接起來生成最終查詢結果。
7、Cache 和 Buffer
查詢緩存:主要功能是將客戶端提交 給 MySQL 的 Select 類 query 請求的返回結果集 cache 到內存中,與該 query 的一個 hash 值 做一個對應。該 query 所取數據的基表發生任何數據的變化之后,MySQL 會自動使該 query 的 Cache 失效。在讀寫比例非常高的應用系統中,Query Cache 對性能的提高是非常顯著的。當然它對內存的消耗也是非常大的。
如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,key 緩存,權限緩存等。
8、存儲引擎接口
MySQL 區別于其他數據庫的最重要的特點就是其插件式的表存儲引擎。MySQL 插件式的存儲引擎架構提供了一系列標準的管理和服務支持,這些標準與存儲引擎本身無關,可能是每個數據庫系統本身都必需的,如 SQL 分析器和優化器等,而存儲引擎是底層物理結構的實現,每個存儲引擎開發者都可以按照自己的意愿來進行開發。
注意:存儲引擎是基于表的,而不是數據庫。
數據庫的工作流程
相信通過上述的介紹,大家對 MySQL 的邏輯架構已經有了一定的了解,下面我們下來介紹一下數據庫具體的工作流程,先看一張圖:
在這里,我從數據庫架構的三個層面分別介紹數據庫的工作流程:
最上層:客戶端連接
1、連接處理:客戶端同數據庫服務層建立 TCP 連接,連接管理模塊會建立連接,并請求一個連接線程。如果連接池中有空閑的連接線程,則分配給這個連接,如果沒有,在沒有超過最大連接數的情況下,創建新的連接線程負責這個客戶端。
2、授權認證:在真正的操作之前,還需要調用用戶模塊進行授權檢查,來驗證用戶是否有權限。通過后,方才提供服務,連接線程開始接收并處理來自客戶端的 SQL 語句。
第二層:核心服務
1、連接線程接收到 SQL 語句之后,將語句交給 SQL 語句解析模塊進行語法分析和語義分析。
2、如果是一個查詢語句,則可以先看查詢緩存中是否有結果,如果有結果可以直接返回給客戶端。
3、如果查詢緩存中沒有結果,就需要真的查詢數據庫引擎層了,于是發給 SQL 優化器,進行查詢的優化。如果是表變更,則分別交給 insert、update、delete、create、alter 處理模塊進行處理。
第三層:數據庫引擎層
1、打開表,如果需要的話獲取相應的鎖。
2、先查詢緩存頁中有沒有相應的數據,如果有則可以直接返回,如果沒有就要從磁盤上去讀取。
3、當在磁盤中找到相應的數據之后,則會加載到緩存中來,從而使得后面的查詢更加高效,由于內存有限,多采用變通的 LRU 表來管理緩存頁,保證緩存的都是經常訪問的數據。
最后,獲取數據后返回給客戶端,關閉連接,釋放連接線程。
到此,相信大家對“MySQL 的邏輯架構及工作流程是什么”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!