1. 程式人生 > 資料庫 >MySQL高階-MySQL儲存引擎

MySQL高階-MySQL儲存引擎

1.MySQL體系結構

在這裡插入圖片描述
MySQL體系結構圖解釋說明:

  • MySQL體系結構圖和我們web開發中的三層架構是十分類似的。web開發中,前臺發出請求經過controller,controller呼叫service,service呼叫dao,dao再去呼叫資料庫。
  • MySQL體系結構中,最上面的部分代表的是客戶端,在這些客戶端的連線中,最熟悉的是JDBC,我們在程式中可以通過JDBC來操作MySQL。
  • 下面的一大塊就是MySQL的服務端。MySQL的服務端最上面一層是MySQL連線池,連線池中有很多的元件和模組,客戶端發起連線之後,就要到MySQL連線池中獲取連線,來執行對應的請求。MySQL獲取連線的時候還要進行認證和一些快取的相關操作。服務端的第二層左邊的第一個是管理服務,管理服務可以進行資料備份於恢復以及叢集安全等系統配置相關的工作。第二個是SQL介面,這裡面可以可以封裝DML,DDL以及儲存過程觸發器等相關資料庫物件。第三個parser是解析器,解析客戶端發起的請求(SQL)語句。第四個optimizer是優化器。內部要對SQL語句進行優化。第五個是快取的相關操作,比如查詢快取中有沒有對應的資料,如果有對應的快取資訊,我們直接寫回去。
  • 第三層是儲存引擎層:MySQL的儲存引擎有很多種,MySQL5.5版本之後,預設的是InnoDB。引擎可以理解為發動機,儲存引擎會根據我們需求的不同而選擇不同的儲存引擎來儲存資料。
  • 第四層指的是儲存層:操作MySQL資料的時候,不管是插入還是查詢更新刪除,最終操作的都是我們的檔案系統中的檔案,而檔案就儲存在我們的磁碟上。除此之外,還有日誌資訊,索引資訊等等。

下面的是官方解釋:

整個MySQL Server由以下組成

  • Connection Pool : 連線池元件
  • Management Services & Utilities : 管理服務和工具元件
  • SQL Interface : SQL介面元件
  • Parser : 查詢分析器元件
  • Optimizer : 優化器元件
  • Caches & Buffers : 緩衝池元件
  • Pluggable Storage Engines : 儲存引擎
  • File System : 檔案系統

1) 連線層

最上層是一些客戶端和連結服務,包含本地sock 通訊和大多數基於客戶端/服務端工具實現的類似於 TCP/IP的通訊。主要完成一些類似於連線處理、授權認證、及相關的安全方案。在該層上引入了執行緒池的概念,為通過認證安全接入的客戶端提供執行緒。同樣在該層上可以實現基於SSL的安全連結。伺服器也會為安全接入的每個客戶端驗證它所具有的操作許可權。

2) 服務層

第二層架構主要完成大多數的核心服務功能,如SQL介面,並完成快取的查詢,SQL的分析和優化,部分內建函式的執行。所有跨儲存引擎的功能也在這一層實現,如 過程、函式等。在該層,伺服器會解析查詢並建立相應的內部解析樹,並對其完成相應的優化如確定表的查詢的順序,是否利用索引等, 最後生成相應的執行操作。如果是select語句,伺服器還會查詢內部的快取,如果快取空間足夠大,這樣在解決大量讀操作的環境中能夠很好的提升系統的效能。

3) 引擎層

儲存引擎層, 儲存引擎真正的負責了MySQL中資料的儲存和提取,伺服器通過API和儲存引擎進行通訊。不同的儲存引擎具有不同的功能,這樣我們可以根據自己的需要,來選取合適的儲存引擎。

4)儲存層

資料儲存層, 主要是將資料儲存在檔案系統之上,並完成與儲存引擎的互動。

和其他資料庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用併發揮良好作用。主要體現在儲存引擎上,外掛式的儲存引擎架構將查詢處理和其他的系統任務以及資料的儲存提取分離。這種架構可以根據業務的需求和實際需要選擇合適的儲存引擎

2. 儲存引擎

2.1 儲存引擎概述

和大多數的資料庫不同, MySQL中有一個儲存引擎的概念, 針對不同的儲存需求可以選擇最優的儲存引擎

儲存引擎就是儲存資料,建立索引,更新查詢資料等等技術的實現方式 。儲存引擎是基於表的,而不是基於庫的。所以儲存引擎也可被稱為表型別

Oracle,SqlServer等資料庫只有一種儲存引擎。MySQL提供了外掛式的儲存引擎架構。所以MySQL存在多種儲存引擎,可以根據需要使用相應引擎,或者編寫儲存引擎

MySQL5.0支援的儲存引擎包含 : InnoDB 、MyISAM 、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事務安全表,其他儲存引擎是非事務安全表。
可以通過指定 show engines , 來查詢當前資料庫支援的儲存引擎 :