1、概述
我們對某技術的學習,目的很簡單,一是為了學習技術的使用;二是進行思想的學習。學習技術時,先了解思想,對于技術的掌握是大有益處的,一般了解技術思想的途徑,從他的架構設計和源碼是最直接的。
mysql是一個開源的關系型資料庫産品, 采用處理與存儲分離的設計,靈活性高,這些年已成為網際網路應用上常用的關系型資料庫。網際網路系統特點是高并發,大資料量,一般瓶頸最終還是會落到資料庫,是以優化mysql是必不可少的。想對mysql了解,我們先了解它架構設計思想。
安裝mysql後主要有下面幾個元件:
mysql伺服器:
-
- 也稱為mysqld;
- 管理記憶體和碰盤上實際的資料庫通路;
- 多線程的;
- 支援多用戶端連接配接;
- 支援多種存儲引擎;
- 單機上可以安裝多個執行個體。
用戶端程式:
bin目錄下實用的程式
非用戶端面程式:
獨立于伺服器的用戶端程式
2、mysql邏輯結構
mysql采用分層架構,并分成了多個子系統,每個子系統都有互相獨立又互相協助,共同完成資料庫伺服器功能。下圖為mysql邏輯架構圖
公共服務層:
為整個系統提供基礎、公用的服務;
服務層:
分為有API,Query Parsing,Optimization,Execution,Query Cache等子系統。
API:用于接收SQL指令,如我們通過用戶端直接select * from table;
Query Parsing:解釋查詢,對傳入的SQL語句進行解釋、驗證,并生成SQL_ID與SQL語句關聯;
Optimization:對Query Parsing傳入的SQL,根據不同的存儲引擎生成優化後的執行計劃,并重寫查詢。
Execution:執行根據Query Parsing和Optimization處理過的資料。
Query Cache:基于記憶體的緩存,根據SQL_ID.SELECT來判斷是否已經處理過相同的查詢語句,如果處理過,直接從Query Cache中傳回結果集,加快讀速度。
存儲引擎層:
Mysql中特性之一,用于進行資料處理和檔案管理,采用的是處理與存儲分離,可以根據應用需要進行相應靈活的選擇。mysql中存儲引擎有事務型和非事務型的,我們可以通過指令show engines來檢視目前mysql資料庫版本支援的存儲引擎。
目前用的是MYSQL5.6.
InnoDB,預設的存儲引擎,支援事務,采用行鎖;
MyISAM:讀資料很快,不支援事務,采用表鎖機制;
MEMORY:基于記憶體的資料庫,不支援事務,采用表鎖.
其它的資料引擎用的很少,暫時不介紹,但圖中有一種存儲引擎是沒有顯示出來的,即NDB,我們暫時可以把它當做是InnoDB的叢集版本。
來,坐來下
品位這一杯茶
讓我們一起并肩成長
成長會讓我們看的更遠
走的更長