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

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

SQL Layer 中包括了多個子模塊:
一、初始化模塊
  MySQL Server 啓動的時候,對整個系統作各類各樣的初始化操做,比方各類buffer。cache 結構的初始化和內存空間的申請,各類系統變量的初始化設定。各類存儲引擎的初始化設置,等等。


二、核心API(源代碼在mysys 和strings目錄如下)
  提供一些需要很高效的底層操做功能的優化實現,包含各類底層數據結構的實現,特殊算法的實現,字符串處理。數字處理等。小文件I/O。格式化輸出,以及最重要的內存管理部分。算法


三、網絡交互模塊(源代碼在vio目錄如下)
  底層網絡交互模塊抽象出底層網絡交互所使用的接口api。實現底層網絡數據的接收與發送,以方便其它各個模塊調用,以及對這一部分的維護。
四、Client & Server 交互協議模塊
  不論什麼C/S 結構的軟件系統。都確定會有本身獨有的信息交互協議。MySQL 也不例外。MySQL的Client & Server 交互協議模塊部分,實現了client與MySQL 交互過程當中的所有協議。sql

固然這些協議都是創建在現有的OS 和網絡協議之上的。如TCP/IP 以及Unix Socket。數據庫


五、用戶模塊
  用戶模塊所實現的功能。主要包含用戶的登陸鏈接權限控制和用戶的受權管理。
六、訪問控制模塊
  訪問控制模塊實現的功能就是依據用戶模塊中各用戶的受權信息,以及數據庫自身特有的各類約束。來控制用戶對數據的訪問。用戶模塊和訪問控制模塊二者結合起來,組成了MySQL 整個數據庫系統的權限安全管理的功能。
七、鏈接管理、鏈接線程和線程管理
  鏈接管理模塊負責監聽對MySQL Server 的各類請求,接收鏈接請求,轉發所有鏈接請求到線程管理模塊。api

每一個鏈接上MySQL Server 的client請求都會被分配(或建立)一個鏈接線程爲其單獨服務。而鏈接線程的主要工做就是負責MySQL Server 與client的通訊。接受client的命令請求,傳遞Server 端的結果信息等。線程管理模塊則負責管理維護這些鏈接線程。包含線程的建立。線程的cache 等。
八、Query 解析和轉發模塊
  其主要工做就是將query 語句進行語義和語法的分析,而後依照不一樣的操做類型進行分
  注意:咱們習慣將所有Client 端發送給Server 端的命令都稱爲query
九、Query Cache 模塊
  將client提交給MySQL 的Select 類query 請求的返回結果集cache 到內存中,與該query 的一個hash 值作一個相應。該Query 所取數據的基表發生不論什麼數據的變化以後,MySQL 會本身主動使該query 的Cache 失效。在讀寫比例很高的應用系統中。Query Cache 對性能的提升是很顯著的。安全

固然它對內存的消耗也是很大的。
十、Query 優化器模塊
  優化client請求的query。依據client請求的query 語句,和數據庫中的一些統計信息,在一系列算法的基礎上進行分析。得出一個最優的策略,告訴後面的程序怎樣取得這個query 語句的結果。網絡


十一、表變動管理模塊
  表變動管理模塊主要是負責完畢一些DML 和DDL 的query,如:update,delte。insert,create table,alter table 等語句的處理。
十二、表維護模塊
  表的狀態檢查,錯誤修復,以及優化和分析等工做都是表維護模塊需要作的事情。數據結構


1三、系統狀態管理模塊
  系統狀態管理模塊負責在client請求系統狀態的時候。將各類狀態數據返回給用戶,像DBA 常用的各類show status 命令。show variables 命令等。所獲得的結果都是由這個模塊返回的。
1四、表管理器
  表管理器的工做主要就是維護*.frm文件,以及一個cache,該cache 中的主要內容是各個表的結構信息。此外它還維護table 級別的鎖管理。
1五、日誌記錄模塊
  日誌記錄模塊主要負責整個系統級別的邏輯層的日誌的記錄。包含error log,binary log,slow query log 等。
1六、複製模塊
  複製模塊又可分爲Master 模塊和Slave 模塊兩部分:
    Master 模塊主要負責在Replication 環境中讀取Master 端的binary 日誌。以及與Slave 端的I/O 線程交互等工做。
    Slave 模塊比Master 模塊所要作的事情稍多一些,在系統中主要體現在兩個線程上面:
      一個是負責從Master 請求和接受binary 日誌。並寫入本地relay log 中的I/O 線程。架構


      一個是負責從relay log 中讀取相關日誌事件,而後解析成可以在Slave 端正確運行並獲得和Master 端全然一樣的結果的命令並再交給Slave 運行的SQL 線程。
1七、存儲引擎接口模塊
  實現其底層數據存儲引擎的插件式管理。post

它成功地將各類數據處理高度抽象化。造成MySQL可插拔存儲引擎的特點。性能

相關文章
相關標籤/搜索