MySQL邏輯架構、執行流程以及存儲引擎

一、MySQL的邏輯架構

    MySQL的整體邏輯架構如下所示

下面對各個模塊進行介紹:

1.連接器(connectors)

    一些客戶端和連接服務,包含本地sock通信和大多數基於客戶端/服務端工具實現的類似於tcp/ip的通信。主要完成一些類似於連接處理、授權認證、及相關的安全方案。在該層上引入了線程池的概念,爲通過認證安全接入的客戶端提供線程。同樣在該層上可以實現基於SSL的安全鏈接。服務器也會爲安全接入的每個客戶端驗證它所具有的操作權限,根據不同語言與SQL的交互。

2.系統管理和控制工具(management services & utilities)

3.連接池(connection pool)

    管理緩衝用戶連接,線程處理等需要緩存的需求。

    負責監聽對 MySQL Server 的各種請求,接收連接請求,轉發所有連接請求到線程管理模塊。每一個連接上 MySQL Server 的客戶端請求都會被分配(或創建)一個連接線程爲其單獨服務。

    連接線程的主要工作就是負責 MySQL Server 與客戶端的通信,接受客戶端的命令請求,傳遞 Server 端的結果信息等。線程管理模塊則負責管理維護這些連接線程。包括線程的創建,線程的 cache 等。

4.SQL接口(SQL interface)

    接受用戶的SQL命令,並且返回用戶需要查詢的結果。

5.解析器(parser)

    SQL命令傳遞到解析器的時候會被解析器驗證和解析。

  • 將SQL語句進行語義和語法的分析,分解成數據結構,然後按照不同的操作類型進行分類,然後做出針對性的轉發到後續步驟,以後SQL語句的傳遞和處理就是基於這個結構的。
  • 如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的

6.查詢優化器(optimizer)

     SQL語句在查詢之前會使用查詢優化器對查詢進行優化

    查詢優化器使用的策略是“選取-投影-聯接”

例如:select id,name from user where age = 18;

  • 該條查詢語言先根據where語句進行選取,並不是將所有的數據查詢出來再進行過濾;
  • 再根據 id,name 進行屬性投影,並不是將所有的屬性全部提取出來之後進行過濾;
  • 最後將兩個查詢條件聯接起來生成最終的查詢結果。

7.查詢緩存(cache 和 buffer)

    主要功能是將客戶端提交給MySQL的 select請求的返回結果集 cache 到內存中,與該 query 的一個 hash 值 做一個對應。該 Query 所取數據的基表發生任何數據的變化之後, MySQL 會自動使該 query 的Cache 失效。在讀寫比例非常高的應用系統中, Query Cache 對性能的提高是非常顯著的,當然它對內存的消耗也是非常大的。

    如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,權限緩存等。

8.存儲引擎(pluggable storage engines)

    存儲引擎接口模塊可以說是 MySQL 數據庫中最有特色的一點了。目前各種數據庫產品中,基本上只有 MySQL 可以實現其底層數據存儲引擎的插件式管理。這個模塊實際上只是 一個抽象類,但正是因爲它成功地將各種數據處理高度抽象化,才成就了今天 MySQL 可插拔存儲引擎的特色。

注意:存儲引擎是基於表,而不是數據庫。

二、MySQL的簡單執行流程

三、存儲引擎

MyISAM

高速引擎,擁有較高的插入,查詢速度,但不支持事務、不支持行鎖、不支持外鍵、支持3種不同的存儲格式。包含靜態型、動態型和壓縮型

InnoDB

5.5之後MySQL的默認數據庫引擎,支持事務和行級鎖,事務處理、回滾、崩潰修復能力和多版本併發控制的事務安全,比MyISAM處理速度稍慢,支持外鍵。

ISAM

MyISAM的前身,5.0以後不再默認安裝

MRG MyISAM(MERGE)

將多個表聯合成一個表使用,在超大規模數據存儲時很有用。

Memory

內存存儲引擎,擁有極高的插入,更新和查詢效率。但是會佔用和數據量成正比的內存空間。在內存上保存數據,意味着數據很有可能會丟失。

Falcon

一種新的存儲引擎,支持事務處理,有可能是innoDB的替代者

Archive

將數據壓縮後存儲,非常適合存儲大量的、獨立的,作爲歷史記錄的數據,但是隻能進行插入和查詢

CSV

CSV存儲引擎是基於CSV格式文件存儲數據(應用於跨平臺的數據交換)

多存儲引擎是MySQL區別於其他數據庫的一大特性,存儲引擎是針對表的;

MySQL5.5之後,默認的存儲引擎有MyISAM 變成了 InnoDB。

開發中最多使用的就是InnoDB 和 MyISAM,下面對於這兩種引擎進行介紹:

  InnoDB MyISAM
存儲文件

.frm 表定義文件

.ibd 數據文件

.frm 表定義文件

.myd 數據文件

.myi 索引文件

表鎖、行鎖 表鎖
事務 acid 不支持
crud 讀和寫多 讀多
count 掃表 有專門存儲的地方
索引結構 B + tree B+tree

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章