MySQL 體系結構與存儲引擎

數據庫:

物理操做系統文件或其餘形式文件類型的集合。在MySQL數據庫中,數據庫文件能夠是frm, MYD, MYI, ibd結尾的文件。當使用NDB引擎時,數據庫的文件可能不是操做系統上的文件,而是存放於內存之中的文件,可是定義仍然不變。數據庫

實例:

MySQL數據庫由後臺線程以及一個共享內存區組成。共享內存能夠被運行的後臺線程所共享。須要牢記的是,數據庫實例纔是真正用於操做數據庫文件的。緩存

MySQL由一下及部分構成:

1. 鏈接池組建安全

2. 管理服務和工做組建服務器

3. SQL接口組件網絡

4. 查詢分析組件併發

5. 優化器組件高併發

6. 緩衝組件性能

7. 插件式儲存引擎優化

8. 物理文件操作系統

MySQL數據庫區別於其餘數據庫的最重要的一個特色就是其插件式的表存儲引擎。須要特別注意的是,存儲引擎是基於表的,而不是數據庫。

 

InnoDB存儲引擎:

InnoDB存儲引擎支持事務,其設計目標主要面向在線事務處理(OLTP)的應用。其特色是行鎖設計,支持外鍵,並支持相似於Oracle的非鎖定讀,即默認讀取操做不會產生鎖。從數據庫5.58版本開始,InnoDB存儲引擎是默認的存儲引擎。

InnoDB經過使用多版本併發控制(MVCC)來獲取高併發特性,並實現了SQL標準4種隔離級別,默認爲REPEATABLE級別。同時,使用一種被稱爲next-key locking的策略來避免幻讀(phantom)現象產生。除此以外,InnoDB存儲引擎還提供了插入緩存(insert buffer),二次寫(double write),自適應哈希索引(adaptive hash index),預讀(read ahead)等高性能和高可用的功能。

對於表中數據的存儲,InnoDB存儲引擎採用了彙集(clustered)的方式,所以每張表的存儲都是按照主鍵的順序進行存放。若是沒有顯示的在表定義時指頂主鍵,InnoDB存儲引擎會爲每一行生成一個6字節的ROWID,並一次做爲主鍵。

MyISAM存儲引擎:

MyISAM存儲引擎不支持事務,表鎖設計,支持全文索引,主要面向一些OLAP主句庫應用。在MySQL 5.58版本以前MyISAM存儲引擎是默認的存儲引擎。數據庫系統與文件系統很大的一個不一樣之處在於對事務的支持,然而MyISAM存儲引擎是不支持事務的。畢竟不是全部的應用都須要事務進行操做。

MyISAM引擎的另外一個不同凡響的地方是它的緩衝池只緩存(cache)索引文件,而不緩存數據文件。這和大部分數據庫都很是不一樣。

NDB儲存引擎:

特色是數據全放在內存中,所以主鍵查找(primary key lookups)的速度極快,而且經過添加NDB數據存儲節點(Data Node)能夠線性地提升數據庫性能,是高可用,高性能的集羣系統。

NDB存儲引擎的JOIN操做是在MySQL數據層完成的,而不是在存儲引擎層完成的。這意味着複雜的JOIN操做須要巨大的網絡開銷,所以查詢速度很慢。

Memory存儲引擎:

Memory存儲引擎將表中的數據存放在內存中,所以,數據庫發生崩潰或者重啓,表中的數據都將消失。它很是適合用於存儲臨時數據的臨時表,以及數據倉庫中的維度表。Memory存儲引擎默認使用哈希索引,而不是咱們熟悉的B+樹索引。

雖然Memory存儲引擎速度很是快,但在使用上仍是有必定的限制。好比,只支持表鎖,併發性能較差,且不支持TEXT和BLOB列類型。最重要的是,存儲變長字段varchar時,是按照字段char的方式進行的,所以會浪費內存。

此外有一點,MySQL數據庫使用Memory存儲引擎做爲臨時表來存放查詢的中間結果(Intermediate result)。若是中間結果大於Memory存儲引擎表的容量設置,又或者中間結果含有TEXT或BLOG列類型字段,則MySQL數據庫會把其轉換到MyISAM存儲引擎表而放到磁盤中。以前提到MyISAM不緩存數據文件,所以這時產生的臨時表的性能對於查詢會有損失。

Archive存儲引擎:

Archive存儲引擎只支持INSERT和SELECT操做,從MySQL 5.1開始支持索引。Archive存儲引擎很是適合存儲歸檔數據,如日誌信息。Archive存儲引擎使用行鎖來實現高併發插入操做,可是其自己並非事務安全的存儲引擎,其設計目標主要時提供告訴的插入和壓縮功能。

Federated存儲引擎:

Federated存儲引擎表並不存放數據,它只時指向一臺遠程MySQL數據庫服務器上的表。這很是相似於SQL Server的連接服務器和Oracle的透明網關,不一樣的時,當前Federated存儲引擎只支持MySQL數據庫表,不支持異構數據庫表。

Maria存儲引擎:

Maria存儲引擎時新開發的引擎,設計目標主要時用來取代原有的MyISAM 存儲引擎,從而成爲MySQL的默認存儲引擎。它的特色是:支持緩存數據和索引文件,應用了行鎖設計,提供MVCC功能,支持事務和非事務的安全選項,以及更好的處理BLOB字符類型。

相關文章
相關標籤/搜索