MySQL系列 | MySQL高級-08邏輯架構

MySQL邏輯架構

MySQL做爲一個大型的網絡程序、數據管理系統,架構很是複雜。下圖大體畫出了其邏輯架構。MySQL基架大體包括以下幾大模塊組件:mysql

 

(1)MySQL向外提供的交互接口(Connectors)sql

 

(2)管理服務組件和工具組件(Management Service & Utilities)數據庫

 

(3)鏈接池組件(Connection Pool)緩存

 

(4)SQL接口組件(SQL Interface)網絡

 

(5)查詢分析器組件(Parser)架構

 

(6)優化器組件(Optimizer)app

 

(7)緩存主件(Caches & Buffers)ide

 

(8)插件式存儲引擎(Pluggable Storage Engines)函數

 

(9)物理文件(File System)工具

 

Connectors
MySQL首先是一個網絡程序,其在TCP之上定義了本身的應用層協議。因此要使用MySQL,咱們能夠編寫代碼,跟MySQL Server創建TCP鏈接,以後按照其定義好的協議進行交互。固然這樣比較麻煩,比較方便的辦法是調用SDK,好比Native C API、JDBC、PHP等各語言MySQL Connector,或者經過ODBC。但經過SDK來訪問MySQL,本質上仍是在TCP鏈接上經過MySQL協議跟MySQL進行交互。

Connection Management
每個基於TCP的網絡服務都須要管理客戶端連接,MySQL也不例外。MySQL會爲每個鏈接綁定一個線程,以後這個鏈接上的全部查詢都在這個線程中執行。爲了不頻繁建立和銷燬線程帶來開銷,MySQL一般會緩存線程或者使用線程池,從而避免頻繁的建立和銷燬線程。

客戶端鏈接到MySQL後,在使用MySQL的功能以前,須要進行認證,認證基於用戶名、主機名、密碼。若是用了SSL或者TLS的方式進行鏈接,還會進行證書認證。

SQL Interface
MySQL支持DML(數據操做語言)、DDL(數據定義語言)、存儲過程、視圖、觸發器、自定義函數等多種SQL語言接口。

Parser
MySQL會解析SQL查詢,併爲其建立語法樹,並根據數據字典豐富查詢語法樹,會驗證該客戶端是否具備執行該查詢的權限。建立好語法樹後,MySQL還會對SQl查詢進行語法上的優化,進行查詢重寫。

Optimizer
語法解析和查詢重寫以後,MySQL會根據語法樹和數據的統計信息對SQL進行優化,包括決定表的讀取順序、選擇合適的索引等,最終生成SQL的具體執行步驟。這些具體的執行步驟裏真正的數據操做都是經過預先定義好的存儲引擎API來進行的,與具體的存儲引擎實現無關。

Caches & Buffers
MySQL內部維持着一些Cache和Buffer,好比Query Cache用來緩存一條Select語句的執行結果,若是可以在其中找到對應的查詢結果,那麼就沒必要再進行查詢解析、優化和執行的整個過程了。

Pluggable Storage Engine
存儲引擎的具體實現,這些存儲引擎都實現了MySQl定義好的存儲引擎API的部分或者所有。MySQL能夠動態安裝或移除存儲引擎,能夠有多種存儲引擎同時存在,能夠爲每一個Table設置不一樣的存儲引擎。存儲引擎負責在文件系統之上,管理表的數據、索引的實際內容,同時也會管理運行時的Cache、Buffer、事務、Log等數據和功能。

MySQL 5.7.11默認支持的存儲引擎以下:

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

File System
全部的數據,數據庫、表的定義,表的每一行的內容,索引,都是存在文件系統上,以文件的方式存在的。固然有些存儲引擎好比InnoDB,也支持不使用文件系統直接管理裸設備,但現代文件系統的實現使得這樣作沒有必要了。

在文件系統之下,可使用本地磁盤,可使用DAS、NAS、SAN等各類存儲系統。

相關文章
相關標籤/搜索