MySQL基礎篇(05):邏輯架構圖解和InnoDB存儲引擎詳解

本文源碼:GitHub·點這裏 || GitEE·點這裏html

1、MySQL邏輯架構

一、邏輯架構圖

基於下面的邏輯架構圖,能夠大體熟悉MySQL各個架構組件之間的協同工做關係。mysql

很經典的C/S架構風格,即客戶端/服務端模式。git

二、分層描述

  • 客戶端鏈接

一般會進行鏈接池管理,鏈接用戶權限認證,安全管理等操做。github

能夠經過以下命令查看鏈接配置信息:SHOW VARIABLES LIKE '%connect%';能夠看到最大鏈接和每一個鏈接佔用的內存等相關配置。sql

  • 核心功能

第二層架構封裝MySQL一系列核心操做,查詢解析、優化、緩存、內置函數、觸發器、視圖等,跨存儲引擎的功能都在這一層實現。數據庫

  • 存儲引擎

MySQL的最底層封裝,也是最核心的功能,不一樣的存儲引擎有不一樣的特色功能,共同點是處理數據的存儲和提取。編程

2、概念簡介

一、存儲引擎

MySQL數據庫存儲引擎是數據庫底層的架構組件,數據庫管理系統使用數據引擎進行建立、查詢、更新和刪除數據操做。不一樣的存儲引擎提供不一樣的存儲機制、索引技巧、鎖定水平等功能,使用不一樣的存儲引擎還具備不一樣的特色功能,以知足不一樣場景下的業務需求。緩存

二、支持關係

能夠經過下面兩個命令查看MySQL當前版本,和對存儲引擎的支持狀況。安全

SELECT VERSION() ; SHOW ENGINES ;

能夠看出本地環境是MySQL5.7,支持以下幾種存儲引擎:架構

該版本下默認的存儲引擎是:InnoDB,功能最爲豐富和強大,支持事務,分佈式事務,事務保存點。

3、常見存儲引擎

一、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

多版本併發控制,經過保存數據在某個時間點的快照來實現的。這意味着一個事務不管運行多長時間,在同一個事務裏可以看到數據一致的視圖。根據事務開始的時間不一樣,同時也意味着在同一個時刻不一樣事務看到的相同表裏的數據多是不一樣的。

  • 支持聚簇索引

是一種對磁盤上實際數據從新組織以按指定的一個或多個列的值排序。因爲聚簇索引的索引頁面指針指向數據頁面,因此使用聚簇索引查找數據幾乎老是比使用非聚簇索引快。

二、MyISAM引擎

(1)、基礎描述

MySQL5.1和以前版本的默認存儲引擎,不支持事務和行級鎖,天然崩潰以後不能自動恢復。

(2)、特色描述

  • 鎖表機制

對整張表加鎖,不針對行加鎖,讀數據加共享鎖,寫數據加排他鎖。

  • 全文索引

支持全文索引,一種基於分詞建立的索引,能夠支持複雜的檢索查詢。

三、其餘引擎

在MySQL的體系中,最常使用的就是InnoDB和MyISAM引擎,其餘多樣的存儲引擎能夠根據業務需求再去熟悉。

絮叨一句:人生苦短,編程語言更是五馬六路,這點使人煩躁,因此學習的時候要挑重點,什麼是重點,使用最多的就是重點內容。

4、存儲引擎選擇

在公司的開發規範中,通常硬性要求使用InnoDB引擎,除非有怪癖的業務InnoDB沒法支持。

5、源代碼地址

GitHub·地址
https://github.com/cicadasmile/mysql-data-base
GitEE·地址
https://gitee.com/cicadasmile/mysql-data-base

原文出處:https://www.cnblogs.com/cicada-smile/p/12397819.html

相關文章
相關標籤/搜索