MySQL是最流行的關係型數據庫管理系統,有不少Java程序員初學MySQL時都會被其繁雜的操做以及知識結構嚇到,接下來小編就給你們簡單分析MySQL的結構與引擎對比。程序員
一、最上層的服務並非MySQL獨有的,大多數基於網絡的客戶端/服務器的工具或者服務都有相似的架構。sql
二、第二層架構中,大多數的MySQL的核心服務功能都在這一層,包括查詢解析、分析、優化、緩存以及全部的內置函數(日期時間等),全部跨存儲引擎的功能都在這一層實現:存儲過程、觸發器、視圖等。數據庫
三、第三層包含了存儲引擎。存儲引擎負責MySQL中的數據的存儲和提取。MySQL支持各類不一樣的存儲引擎,每一個存儲引擎都有它的優點和劣勢。服務器經過API和存儲引擎進行通訊。這些API接口屏蔽了不一樣存儲引擎之間的差別,使得這些差別對上層的查詢過程透明。存儲引擎不會解析SQL(InnoDB是個例外,它會解析外鍵定義),不一樣的存儲引擎之間也不能互相通訊,而只是簡單的響應上層服務器的請求!緩存
數據庫存儲引擎是數據庫底層軟件組件,數據庫管理系統使用數據引擎進行建立、查詢、更新和刪除數據操做。安全
不一樣的存儲引擎提供不一樣的存儲機制、索引技巧、鎖定水平等功能,使用不一樣的存儲引擎還能夠得到特定的功能。服務器
如今許多數據庫管理系統都支持多種不一樣的存儲引擎。MySQL的核心就是存儲引擎。網絡
MyISAM:擁有較高的插入,查詢速度,但不支持事務。架構
InnoDB :5.5版本後MySQL的默認數據庫,事務型數據庫的首選引擎,支持ACID事務,支持行級鎖定。分佈式
BDB:源自Berkeley DB,事務型數據庫的另外一種選擇,支持COMMIT和ROLLBACK等其餘事務特性。函數
Memory:全部數據置於內存的存儲引擎,擁有極高的插入,更新和查詢效率。可是會佔用和數據量成正比的內存空間。而且其內容會在Mysql從新啓動時丟失。
Merge:將必定數量的MyISAM表聯合而成一個總體,在超大規模數據存儲時頗有用。
Archive:很是適合存儲大量的獨立的,做爲歷史記錄的數據。由於它們不常常被讀取。Archive擁有高效的插入速度,但其對查詢的支持相對較差。
Federated:將不一樣的Mysql服務器聯合起來,邏輯上組成一個完整的數據庫。很是適合分佈式應用。
Cluster/NDB:高冗餘的存儲引擎,用多臺數據機器聯合提供服務以提升總體性能和安全性。適合數據量大,安全和性能要求高的應用。
CSV:邏輯上由逗號分割數據的存儲引擎。它會在數據庫子目錄裏爲每一個數據表建立一個.CSV文件。這是一種普通文本文件,每一個數據行佔用一個文本行。CSV存儲引擎不支持索引。
BlackHole:黑洞引擎,寫入的任何數據都會消失,通常用於記錄binlog作複製的中繼
另外,MySQL的存儲引擎接口定義良好。有興趣的開發者經過閱讀文檔編寫本身的存儲引擎。