本文原始碼:GitHub·點這里 || GitEE·點這里
一、MySQL邏輯架構
1、邏輯架構圖
基于下面的邏輯架構圖,可以大致熟悉MySQL各個架構組件之間的協同作業關系,

很經典的C/S架構風格,即客戶端/服務端模式,
2、分層描述
- 客戶端連接
通常會進行連接池管理,連接用戶權限認證,安全管理等操作,
可以通過如下命令查看連接配置資訊:SHOW VARIABLES LIKE '%connect%';可以看到最大連接和每個連接占用的記憶體等相關配置,
- 核心功能
第二層架構封裝MySQL一系列核心操作,查詢決議、優化、快取、內置函式、觸發器、視圖等,跨存盤引擎的功能都在這一層實作,
- 存盤引擎
MySQL的最底層封裝,也是最核心的功能,不同的存盤引擎有不同的特點功能,共同點是處理資料的存盤和提取,
二、概念簡介
1、存盤引擎
MySQL資料庫存盤引擎是資料庫底層的架構組件,資料庫管理系統使用資料引擎進行創建、查詢、更新和洗掉資料操作,不同的存盤引擎提供不同的存盤機制、索引技巧、鎖定水平等功能,使用不同的存盤引擎還具有不同的特點功能,以滿足不同場景下的業務需求,
2、支持關系
可以通過下面兩個命令查看MySQL當前版本,和對存盤引擎的支持情況,
SELECT VERSION() ; SHOW ENGINES ;
可以看出本地環境是MySQL5.7,支持如下幾種存盤引擎:

該版本下默認的存盤引擎是:InnoDB,功能最為豐富和強大,支持事務,分布式事務,事務保存點,
三、常見存盤引擎
1、InnoDB引擎
(1)、基本描述
InnoDB引擎是MySQL默認的事務型引擎,使用非常廣泛,極擅長處理短期事務,具有自動崩潰恢復的特性,在日常開發中,一般都要求使用該引擎,
(2)、架構圖解
- InnoDB架構圖
該圖片來自MySQL官網檔案,

整體分三層:記憶體結構,Cache,磁盤結構,
- 記憶體結構
記憶體結構又包括四大組件
Buffer Pool:緩沖池:是主記憶體中的一個區域,在InnoDB訪問表和索引資料時會在其中進行高速快取,大量減少磁盤IO操作,提升效率,
Change Buffer:寫緩沖區:避免每次增刪改都進行IO操作,提升性能,
Adaptive Hash Index:自適應哈希索引:使用索引關鍵字的前綴構建哈希索引,提升查詢速度,
Log Buffer:日志緩沖區:保存要寫入磁盤上的日志檔案的資料,緩沖區的內容定期重繪到磁盤,
- 磁盤結構
Tables:資料表的物理結構,
Indexes:索引的物理結構,
Tablespaces:表空間,資料存盤區域,
Data Dictionary:資料字典,存盤元資料資訊的表,例如表的描述,結構,索引等,
Doublewrite Buffer:位于系統表空間的一個存盤區域,InnoDB在BufferPool中重繪頁面時,會將資料頁寫入該緩沖區后才會寫入磁盤,
Redo Log:記錄DML操作的日志,用來崩潰后的資料恢復,
Undo Logs:資料更改前的快照,可以用來回滾資料,
(3)、特點描述
- 支持事務
事務內在執行一組SQL陳述句時,要么全部成功,要么全部失敗,
- 支持分布式事務
分布式事務指即使不同操作位于不同的服務應用上,仍然需要保證事務的特性,常見場景:訂單和庫存在不同的服務中,但卻能保持一致性,
- 支持行級鎖
加鎖時鎖定一行資料的鎖機制就是行級別鎖定(row-level),MySQL5.7版本中只有InnoDB引擎支持,鎖定的粒度小,自然支持的并發就高,鎖定的機制也隨之變的復雜,
- 支持MVCC
多版本并發控制,通過保存資料在某個時間點的快照來實作的,這意味著一個事務無論運行多長時間,在同一個事務里能夠看到資料一致的視圖,根據事務開始的時間不同,同時也意味著在同一個時刻不同事務看到的相同表里的資料可能是不同的,
- 支持聚簇索引
是一種對磁盤上實際資料重新組織以按指定的一個或多個列的值排序,由于聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查找資料幾乎總是比使用非聚簇索引快,
2、MyISAM引擎
(1)、基礎描述
MySQL5.1和之前版本的默認存盤引擎,不支持事務和行級鎖,自然崩潰之后不能自動恢復,
(2)、特點描述
- 鎖表機制
對整張表加鎖,不針對行加鎖,讀資料加共享鎖,寫資料加排他鎖,
- 全文索引
支持全文索引,一種基于分詞創建的索引,可以支持復雜的檢索查詢,
3、其他引擎
在MySQL的體系中,最常使用的就是InnoDB和MyISAM引擎,其他多樣的存盤引擎可以根據業務需求再去熟悉,
絮叨一句:人生苦短,編程語言更是五馬六路,這點令人煩躁,所以學習的時候要挑重點,什么是重點,使用最多的就是重點內容,
四、存盤引擎選擇
在公司的開發規范中,一般硬性要求使用InnoDB引擎,除非有怪癖的業務InnoDB無法支持,
五、源代碼地址
GitHub·地址
https://github.com/cicadasmile/mysql-data-base
GitEE·地址
https://gitee.com/cicadasmile/mysql-data-base

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/76860.html
標籤:MySQL
下一篇:Mysql中的觸發器
