1. 程式人生 > 資料庫 >MySQL高階學習筆記(三):Mysql邏輯架構介紹、mysql儲存引擎詳解

MySQL高階學習筆記(三):Mysql邏輯架構介紹、mysql儲存引擎詳解

Mysql邏輯架構介紹總體概覽

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

controller層:
Connectors:連線層,c 、java等連線mysql

業務邏輯處理成:
Connection Pool:連線層 c3p0連線池等
Manager Service util:備份、容災恢復、叢集等
sql interface:儲存過程、檢視觸發器
parser:查詢事物、物件的許可權

如果是select開頭的就認為是讀的操作,insert開頭的就是寫的操作,
sql語句的載入從from開始,轉換成mysql能夠讀懂的形式
optimizer:mysql優化器 ,經過前面的轉換,這裡mysql會優化成mysql自己認為最優的方式
,並不是我們人為的優化
caches & buffers:緩衝

可拔插式的儲存引擎
plugin storage engine
大部分用的是myism和innodb

檔案儲存層 計算機硬體
file system
file & logs

1.連線層

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

2.服務層

2.1 Management Serveices & Utilities : 系統管理和控制工具

2.2 SQL Interface : SQL介面
接受使用者的SQL命令,並且返回使用者需要查詢的結果。比如select from就是呼叫SQL Interface

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

2.4 Optimizer : 查詢優化器。
SQL語句在查詢之前會使用查詢優化器對查詢進行優化。
用一個例子就可以理解: select uid,name from user where gender= 1;
優化器來決定先投影還是先過濾。

2.5 Cache和Buffer: 查詢快取。
如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。
這個快取機制是由一系列小快取組成的。比如表快取,記錄快取,key快取,許可權快取等
快取是負責讀,緩衝負責寫。

3.引擎層

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

4.儲存層

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

總體概覽

查詢流程圖:

首先,mysql的查詢流程大致是:
•mysql客戶端通過協議與mysql伺服器建連線,傳送查詢語句,先檢查查詢快取,如果命中(一模一樣的sql才能命中),直接返回結果,否則進行語句解析,也就是說,在解析查詢之前,伺服器會先訪問查詢快取(query cache)——它儲存SELECT語句以及相應的查詢結果集。如果某個查詢結果已經位於快取中,伺服器就不會再對查詢進行解析、優化、以及執行。它僅僅將快取中的結果返回給使用者即可,這將大大提高系統的效能。

語法解析器和預處理:首先mysql通過關鍵字將SQL語句進行解析,並生成一顆對應的“解析樹”。mysql解析器將使用mysql語法規則驗證和解析查詢;前處理器則根據一些mysql規則進一步檢查解析數是否合法。
查詢優化器當解析樹被認為是合法的了,並且由優化器將其轉化成執行計劃。一條查詢可以有很多種執行方式,最後都返回相同的結果。優化器的作用就是找到這其中最好的執行計劃。。
然後,mysql預設使用的BTREE索引,並且一個大致方向是:無論怎麼折騰sql,至少在目前來說,mysql最多隻用到表中的一個索引。

mysql儲存引擎

檢視命令

1 如何用命令檢視

看你的 mysql 現在已提供什麼儲存引擎 :

mysql> show engines;


InnoDB 預設的,支援事物支援外來鍵,且是行鎖

看你的 mysql 當前預設的儲存引擎 :

mysql> show variables like ‘%storage_engine%';


預設的是InnoDB
當前的也是InnoDB

各個引擎簡介

1、InnoDB儲存引擎

InnoDB是MySQL的預設 事務型引擎 ,它被設計用來處理大量的短期(short-lived)事務。除非有非常特別的原因需要使用其他的儲存引擎,否則應該優先考慮InnoDB引擎。 行級鎖,適合高併發情況

2、MyISAM儲存引擎

MyISAM提供了大量的特性,包括全文索引、壓縮、空間函式(GIS)等,但MyISAM 不支援事務和行級鎖(myisam改表時會將整個表全鎖住) ,有一個毫無疑問的缺陷就是崩潰後無法安全恢復。

3、Archive引擎

Archive儲存引擎 只支援INSERT和SELECT 操作,在MySQL5.1之前不支援索引。
Archive表適合日誌和資料採集類應用。 適合低訪問量大資料等情況。
根據英文的測試結論來看,Archive表比MyISAM表要小大約75%,比支援事務處理的InnoDB表小大約83%。

4、Blackhole引擎

Blackhole引擎沒有實現任何儲存機制,它會丟棄所有插入的資料,不做任何儲存。但伺服器會記錄Blackhole表的日誌,所以可以用於複製資料到備庫,或者簡單地記錄到日誌。但這種應用方式會碰到很多問題,因此並不推薦。

5、CSV引擎

CSV引擎可以將普通的CSV檔案作為MySQL的表來處理,但不支援索引。
CSV引擎可以作為一種資料交換的機制,非常有用。
CSV儲存的資料直接可以在作業系統裡,用文字編輯器,或者excel讀取。

6、Memory引擎

如果需要快速地訪問資料,並且這些資料不會被修改,重啟以後丟失也沒有關係,那麼使用Memory表是非常有用。Memory表至少比MyISAM表要快一個數量級。(使用專業的記憶體資料庫更快,如redis)

7、Federated引擎

Federated引擎是訪問其他MySQL伺服器的一個代理,儘管該引擎看起來提供了一種很好的跨伺服器的靈活性,但也經常帶來問題,因此預設是禁用的。

MyISAM和InnoDB(重點)

對比項 MyISAM InnoDB
主外來鍵 不支援 支援
事務 不支援 支援
行表鎖 表鎖,即使操作一條記錄也會鎖住整個表,不適合高併發的操作 行鎖,操作時只鎖某一行,不對其它行有影響, 適合高併發
快取 只快取索引,不快取真實資料 不僅快取索引還要快取真實資料,對記憶體要求較高,而且記憶體大小對效能有決定性的影響
表空間
關注點 效能 事務
預設安裝 Y Y
預設安裝 Y Y
預設安裝 Y Y
使用者表預設使用 N Y
自帶系統表使用 Y N

innodb 索引 使用 B+TREE myisam 索引使用 b-tree
innodb 主鍵為聚簇索引,基於聚簇索引的增刪改查效率非常高。

阿里巴巴、淘寶用哪個


• Percona 為 MySQL 資料庫伺服器進行了改進,在功能和效能上較 MySQL 有著很顯著的提升。該版本提升了在高負載情況下的 InnoDB 的效能、為 DBA 提供一些非常有用的效能診斷工具;另外有更多的引數和命令來控制伺服器行為。

•該公司新建了一款儲存引擎叫 xtradb 完全可以替代 innodb,並且在效能和併發上做得更好,

•阿里巴巴大部分 mysql 資料庫其實使用的 percona 的原型加以修改。
•AliSql+AliRedis

以上所述是小編給大家介紹的Mysql邏輯架構介紹、mysql儲存引擎詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!