MySQL架構組成之邏輯模塊組成

MySQL 可以看成是二層架構
  第一層SQL Layer,包括權限判斷,sql 解析,執行計劃優化,query cache 的處理等等;
  第二層存儲引擎層(Storage Engine Layer),是底層數據存取操作實現部分,由多種存儲引擎共同組成。

SQL Layer 中包含了多個子模塊:
1、初始化模塊
  MySQL Server 啓動的時候,對整個系統做各種各樣的初始化操作,比如各種buffer,cache 結構的初始化和內存空間的申請,各種系統變量的初始化設定,各種存儲引擎的初始化設置,等等。
2、核心API(源碼在mysys 和strings文件夾下面)
  提供一些需要非常高效的底層操作功能的優化實現,包括各種底層數據結構的實現,特殊算法的實現,字符串處理,數字處理等,小文件I/O,格式化輸出,以及最重要的內存管理部分。
3、網絡交互模塊(源碼在vio文件夾下面)
  底層網絡交互模塊抽象出底層網絡交互所使用的接口api,實現底層網絡數據的接收與發送,以方便其他各個模塊調用,以及對這一部分的維護。
4、Client & Server 交互協議模塊
  任何C/S 結構的軟件系統,都肯定會有自己獨有的信息交互協議,MySQL 也不例外。MySQL的Client & Server 交互協議模塊部分,實現了客戶端與MySQL 交互過程中的所有協議。當然這些協議都是建立在現有的OS 和網絡協議之上的,如TCP/IP 以及Unix Socket。
5、用戶模塊
  用戶模塊所實現的功能,主要包括用戶的登錄連接權限控制和用戶的授權管理。
6、訪問控制模塊
  訪問控制模塊實現的功能就是根據用戶模塊中各用戶的授權信息,以及數據庫自身特有的各種約束,來控制用戶對數據的訪問。用戶模塊和訪問控制模塊兩者結合起來,組成了MySQL 整個數據庫系統的權限安全管理的功能。
7、連接管理、連接線程和線程管理
  連接管理模塊負責監聽對MySQL Server 的各種請求,接收連接請求,轉發所有連接請求到線程管理模塊。每一個連接上MySQL Server 的客戶端請求都會被分配(或創建)一個連接線程爲其單獨服務。而連接線程的主要工作就是負責MySQL Server 與客戶端的通信,接受客戶端的命令請求,傳遞Server 端的結果信息等。線程管理模塊則負責管理維護這些連接線程。包括線程的創建,線程的cache 等。
8、Query 解析和轉發模塊
  其主要工作就是將query 語句進行語義和語法的分析,然後按照不同的操作類型進行分
  注意:我們習慣將所有Client 端發送給Server 端的命令都稱爲query
9、Query Cache 模塊
  將客戶端提交給MySQL 的Select 類query 請求的返回結果集cache 到內存中,與該query 的一個hash 值做一個對應。該Query 所取數據的基表發生任何數據的變化之後,MySQL 會自動使該query 的Cache 失效。在讀寫比例非常高的應用系統中,Query Cache 對性能的提高是非常顯著的。當然它對內存的消耗也是非常大的。
10、Query 優化器模塊
  優化客戶端請求的query,根據客戶端請求的query 語句,和數據庫中的一些統計信息,在一系列算法的基礎上進行分析,得出一個最優的策略,告訴後面的程序如何取得這個query 語句的結果。
11、表變更管理模塊
  表變更管理模塊主要是負責完成一些DML 和DDL 的query,如:update,delte,insert,create table,alter table 等語句的處理。
12、表維護模塊
  表的狀態檢查,錯誤修復,以及優化和分析等工作都是表維護模塊需要做的事情。
13、系統狀態管理模塊
  系統狀態管理模塊負責在客戶端請求系統狀態的時候,將各種狀態數據返回給用戶,像DBA 常用的各種show status 命令,show variables 命令等,所得到的結果都是由這個模塊返回的。
14、表管理器
  表管理器的工作主要就是維護*.frm文件,以及一個cache,該cache 中的主要內容是各個表的結構信息。此外它還維護table 級別的鎖管理。
15、日誌記錄模塊
  日誌記錄模塊主要負責整個系統級別的邏輯層的日誌的記錄,包括error log,binary log,slow query log 等。
16、複製模塊
  複製模塊又可分爲Master 模塊和Slave 模塊兩部分:
    Master 模塊主要負責在Replication 環境中讀取Master 端的binary 日誌,以及與Slave 端的I/O 線程交互等工作。
    Slave 模塊比Master 模塊所要做的事情稍多一些,在系統中主要體現在兩個線程上面:
      一個是負責從Master 請求和接受binary 日誌,並寫入本地relay log 中的I/O 線程。
      一個是負責從relay log 中讀取相關日誌事件,然後解析成可以在Slave 端正確執行並得到和Master 端完全相同的結果的命令並再交給Slave 執行的SQL 線程。
17、存儲引擎接口模塊
  實現其底層數據存儲引擎的插件式管理。它成功地將各種數據處理高度抽象化,形成MySQL可插拔存儲引擎的特色。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章