深入瞭解Mysql邏輯架構
Mysql現在是大多數公司企業在用的資料庫,之所以用Mysql,一點是因為Mysql是開源軟體,一些有能力的公司會基於已有的Mysql架構,進行修改、調整改成適合自己公司的業務需要。
一點是因為Mysql免費,相對昂貴的Oracle服務,對於很多剛起步的公司來說,是最適合不過的資料庫了。
之所以要認識Mysql的邏輯架構,就好比我們自己在做開發時,首先需要先掌握自己系統用的分層架構,這樣在開發的過程中,如果有哪個環節產生問題,就很好排查。認識Mysql的邏輯架構也同理,我們在用Mysql的時候,我們不清楚它什麼時候會出現問題,但是當出現問題時(比如優化查詢sql,要從哪一步開始),我們可以更清楚的定位問題。
1.Connections 聯結器
我們連線Mysql的服務作為客戶端連線Mysql服務端,Mysql可以連線各個程式語言平臺
2.系統管理和控制工具(Management Serveices & Utilities)
作為Mysql服務的管理和控制工具,比如備份、還原、複製、叢集等
3.連線池(Connection Pool)
連線池的主要功能是提供連線認證、執行緒複用、連線數限制等
4.SQL Interface(SQL介面)
這裡主要是接收Mysql 的DML、DDL語句,以及儲存過程、檢視、觸發器等
5.Parse(解析器)
這裡主要的對傳過來的sql字串進行解析,比如我們一開始接觸的jdbc程式設計,就是將字串型別的sql語句傳送到mysql裡,然後解析器首先對sql語句進行詞法分析,形成語法樹,接著再對語法樹進行語法分析,看各個分詞是否符合SQL92標準,符合的話再執行下一環節業務處理。
6.查詢優化器(Optimizer)
查詢優化器根據傳過來的SQL語句,進行分析判斷是否是最優的執行語句,主要針對一下三個方面進行分析:
* 使用哪一個索引(一個表有若干個索引,選擇過濾力度最大的那個)
* 多表關聯的表連線順序
* WHERE條件的先後順序(根據MYSQL最左字首原則,會重新擺放條件順序)
7.查詢快取(Cache&Buffer)
MYSQL會將每一條SQL進行hash處理後將hash值放到一個map中,每次有SQL來時先計算SQL的hash值,比較是否相同,相同的話可以執行記憶體的SQL,而不必對新的SQL語句進行解析、優化等操作,加快執行效率。
8.儲存引擎(Pluggable Storage Engines)
MSQL的儲存引擎支援可插拔特性,即使用者可隨意替換想用的儲存引擎,也可以自定義自己的儲存引擎,這裡主要針對INNODB、MYISAM儲存引擎進行分析比較。
平時涉及到儲存引擎的選型,主要針對業務的需要來選擇,可以參考各自的特點。
儲存引擎的選型:
InnoDB:
支援事務處理,支援外來鍵,支援崩潰修復能力和併發控制。如果需要對事務的完整性要求比較高(比如銀行),要求實現併發控制(比如售票),那選擇InnoDB有很大的優勢。如果需要頻繁的更新、刪除操作的資料庫,也可以選擇InnoDB,因為支援事務的提交(commit)和回滾(rollback)。
MyISAM:
插入資料快,空間和記憶體使用比較低。如果表主要是用於插入新記錄和讀出記錄,那麼選擇MyISAM能實現處理高效率。如果應用的完整性、併發性要求比 較低,也可以使用。
MEMORY:
所有的資料都在記憶體中,資料的處理速度快,但是安全性不高。如果需要很快的讀寫速度,對資料的安全性要求較低,不需要持久儲存,可以選擇MEMOEY。它對錶的大小有要求,不能建立太大的表。所以,這類資料庫只使用在相對較小的資料庫表。
這裡有一張MYSQL的簡單執行流程圖,憑靠這張圖對MYSQL整體的一個執行流程會有清晰的認識。
MYSQL的邏輯架構就介紹到這裡。當然MYSQL還有對應的物理架構,不過這一塊主要涉及到MYSQL的各個日誌檔案,以及各個表的資料檔案以及索引檔案,在後面的章節再做介紹。
以上就是深入瞭解Mysql邏輯架構的詳細內容,更多關於Mysql邏輯架構的資料請關注我們其它相關文章!