Mysql架構理解
MySQL架構
1.MySQL邏輯架構:
這裡分為三層:
1.連線層:連線與執行緒處理,這一層並不是MySQL獨有,一般的基於C/S架構的都有類似元件,比如連線處理、授權認證、安全等。
2.SQL處理層:也叫mysql伺服器層,包括快取查詢、解析器、優化器,這一部分是MySQL核心功能,包括解析、優化SQL語句,查詢快取目錄,內建函式(日期、時間、加密等函式)的實現
3.資料儲存層:也叫儲存引擎層,負責資料儲存,儲存引擎的不同,儲存方式、資料格式、提取方式等都不相同,這一部分也是很大影響資料儲存與提取的效能的。但是,與分層的思想一致,SQL處理層是通過API與儲存引擎通訊的,API遮蔽了下層的差異,下層提供對外介面,上層負責呼叫即可,不必清楚下層是怎麼實現的。
客戶端說明:MySQL是基於C/S架構的,這裡的客戶端自然是專門的,能訪問到MySQL伺服器的,主要有這麼幾類,操作客戶端:單純的操作MySQL伺服器中的資料(這裡資料包括庫、表、索引、表中資料等),比如常用的native、phpMyAdmin、Sequal Pro等;應用客戶端:應用程式通過程式訪問資料庫,比如JDBC、ODBC、PHP程式、Python程式等。不管是哪種,其實最後都轉換為SQL語句訪問MySQL。
1.連線層
當MySQL啟動(MySQL伺服器就是一個程式),等待客戶端連線,每一個客戶端連線請求,伺服器都會新建一個執行緒處理(如果是執行緒池的話,則是分配一個空的執行緒),每個執行緒獨立,擁有各自的記憶體處理空間,但是,如果這個請求只是查詢,沒關係,但是若是修改資料,很顯然,當兩個執行緒修改同一塊記憶體是會引發資料同步問題的。
>連線處理流程
連線到伺服器,伺服器需要對其進行驗證,也就是使用者名稱、IP、密碼驗證,一旦連線成功,還要驗證是否具有執行某個特定查詢的許可權(例如,是否允許客戶端對某個資料庫某個表的某個操作)。
>認證流程
2.SQL處理層
這一層主要功能有:SQL語句的解析、優化,快取的查詢,MySQL內建函式的實現,跨儲存引擎功能(所謂跨儲存引擎就是說每個引擎都需提供的功能(引擎需對外提供介面)),例如:儲存過程、觸發器、檢視等。
>執行過程:
(圖中的查詢並不是一定是select語句,在MySQL中,一般習慣把每一條SQL命令稱為query(查詢))
1.如果是查詢語句(select語句),首先會查詢快取是否已有相應結果,有則返回結果,無則進行下一步(如果不是查詢語句,同樣調到下一步);
2.解析查詢,建立一個內部資料結構(解析樹),這個解析樹主要用來SQL語句的語義與語法解析;詳情可檢視:MySQL解析器。
3.優化:優化SQL語句,例如重寫查詢,決定表的讀取順序,以及選擇需要的索引等。這一階段使用者是可以查詢的,查詢伺服器優化器是如何進行優化的,便於使用者重構查詢和修改相關配置,達到最優化。這一階段還涉及到儲存引擎,優化器會詢問儲存引擎,比如某個操作的開銷資訊、是否對特定索引有查詢優化等。詳情可檢視:MySQL優化器。
3.儲存引擎
儲存引擎,也稱為表型別,主要用來儲存資料的,不同的儲存引擎採用不同的技術(儲存機制、索引機制、鎖定機制)儲存資料,這主要是為了滿足資料儲存要求,比如有的資料不需要大量的改動,只用來查詢,而有的資料則需要常常修改(資料插入、刪除、更新),針對各種業務情況,為了更好的資料處理效率採用不同的資料儲存技術(即不同儲存引擎)。
MySQL的儲存引擎是外掛式的,也就是說,使用者可以隨時切換MySQL的儲存引擎:針對表或針對庫都可(通過SQL語句命令)。這種靈活性也是為什麼MySQL受到歡迎的一個重要原因。MySQL集合了多種引擎:MyISAM、InnoDB、BDB、Merge、Memory等,預設的是InnoDB(MySQL5.5開始,以前是MyISAM)。
2.MySQL物理元件
以下主要參考文章:MySQL架構(guisu)。
以上元件是對邏輯架構的實現:
1.Management Services & Utilities
服務管理和控制元件,主要用來回滾操作、恢復資料、資料的複製、遷移、後設資料的管理等。
2.Connection Pool:連線池
連線池,對應邏輯架構的連線層,主要用來管理使用者連線,包括監聽、接收客戶端請求,轉發請求到相應的執行緒管理模組(該模組負責維護這些執行緒,包括建立、執行緒cache,可有執行緒池實現),還有連線的許可權認證工作。
3.SQL Interface:SQL介面
各種SQL介面,用來接收管理SQL命令,比如DML、DDL操作,儲存過程,檢視,觸發器等。
4.Parser:解析器
SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現的,是一個很長的指令碼。
主要功能:
a . 將SQL語句進行語義和語法的分析,分解成資料結構,然後按照不同的操作型別進行分類,然後做出針對性的轉發到後續步驟,以後SQL語句的傳遞和處理就是基於這個結構的。
b. 如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的。
5.Optimizer: 查詢優化器
優化SQL語句,比如常量轉換與計算、無效程式碼排除、AND/OR等等優化。查詢優化器必要的時候還會詢問儲存引擎,計算語句執行消耗,從而得出最優策略去執行該SQL命令。
6.Cache & Buffer: 查詢快取
他的主要功能是將客戶端提交 給MySQL 的 Select 類 query 請求的返回結果集 cache 到記憶體中,與該 query 的一個 hash 值 做一個對應。該 Query 所取資料的基表發生任何資料的變化之後, MySQL 會自動使該 query 的Cache 失效。在讀寫比例非常高的應用系統中, Query Cache 對效能的提高是非常顯著的。當然它對記憶體的消耗也是非常大的。
如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。這個快取機制是由一系列小快取組成的。比如表快取,記錄快取,key快取,許可權快取等
7.儲存引擎
目前只有MySQL實現了外掛式多儲存引擎(加了一層抽象層對接下面的儲存資料層),其他資料庫基本上使用單一的儲存引擎。MySQL的儲存引擎是基於表的,每個表可選擇自己需要的儲存引擎。
相關文章
- 理解 MySQL(1):架構和概念MySql架構
- 理解cassandra架構架構
- 重新理解架構架構
- 理解RESTFul架構REST架構
- MySql架構MySql架構
- 三層架構理解架構
- MySQL的架構MySql架構
- MySQL 高可用架構之 MMM 架構MySql架構
- RAC體系架構理解架構
- NUMA架構的個人理解架構
- MySQL系列-- 1.MySQL架構MySql架構
- MySQL體系架構MySql架構
- MySQL基礎架構MySql架構
- mysql叢集架構MySql架構
- MySQL Server架構概述MySqlServer架構
- MySQL 基礎架構MySql架構
- Kafka 概述:深入理解架構Kafka架構
- 如何理解多租戶架構?架構
- powerVR tbdr 硬體架構理解VR架構
- 理解Underscore的設計架構架構
- springcloud技術架構理解SpringGCCloud架構
- 換個角度,重新理解架構架構
- 軟體架構理解和延伸架構
- Linux 概念架構的理解Linux架構
- 深入理解lambada架構架構
- Tomcat 架構原理解析到架構設計借鑑Tomcat架構
- MySQL主從複製架構轉換MGR架構MySql架構
- 入門MySQL——架構篇MySql架構
- MySQL基礎架構分析MySql架構
- MySQL架構的優化MySql架構優化
- 精通MySQL之架構篇MySql架構
- MySQL之基礎架構MySql架構
- mysql架構和歷史MySql架構
- MySQL 之開放架構MySql架構
- MySQL + Heartbeat + DRBD架構部署MySql架構
- Mysql高可用架構方案MySql架構
- 架構師之路—理解設計模式架構設計模式
- 【譯】理解Node事件驅動架構事件架構