共計 2046 個字符,預計需要花費 6 分鐘才能閱讀完成。
本篇文章為大家展示了如何理解邏輯架構和 InnoDB 存儲引擎,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
一、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 無法支持。
上述內容就是如何理解邏輯架構和 InnoDB 存儲引擎,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。