Mysql 存儲引擎

InnoDB數據庫

InnoDB是MySql默認的事務型存儲引擎,只有在須要innoDB不支持的特性時,才考慮使用其它存儲引擎。緩存

採用MVCC來支持高併發,而且實現了4個標準的隔離機制,默認級別可重複讀,而且經過間隙鎖策略防止幻讀的出現。間隙鎖使得InnoDB不只僅鎖定查詢涉及的行,還會對索引中的間隙進行鎖定,以防止幻影行的插入。服務器

表是基於聚簇索引創建的,它對主鍵的查詢性能有很高的提高。架構

內部作了不少優化,包括從磁盤讀取數據時的可預測性讀、可以自動在內存中建立哈希索引以加速讀操做的自適應哈希索引、可以加速插入操做的插入緩衝區等。併發

經過一些機制和工具支持真正的熱備份。其它存儲引擎不支持熱備份,要獲取一致性視圖須要中止對全部表的寫入,而在讀寫混合場景中,中止寫入可能也意味着中止讀取。高併發

InnoDB架構工具

InnoDB是一個很是龐大的系統,大到包含許多子系統且代碼分佈在幾十個目錄中。採用了層次結構的設計。性能

 

在第一層,Handle API的存在,使得InnoDB可以順利插入到MySql服務器中。同時InnoDB還爲應用系統提供了API,在這種狀況下,用戶能夠直接將InnoDB存儲引擎嵌入到他的應用系統之中。優化

第二層是事務層。在InnoDB中,全部的行爲都發生在事務中。若是咱們在my。cnf中配置了auto-commit這一屬性,那咱們執行的每一個SQL語句都是一個單獨的事務。SQL關鍵字COMMIT、ROLLBACK等被查詢解析子系統解析爲InnoDB特有查詢語句。spa

第三層是鎖功能層。該層完成鎖功能和事務管理和功能(如回滾、提交等操做)。InnoDB採用行級的讀寫鎖。Lock目錄下的lock0lock.c處理全部的鎖功能。InnoDB還特地使用一個鎖表來跟蹤各類各樣鎖的狀況。

第四層是緩存管理。緩存管理層的主要目標是高效地將數據存放在內存之中。該層的功能由目錄buf中的源文件實現。Buf0buf.c提供了緩存池以備將文件分頁存入內存。

第五層是緩存管理。緩存管理層的主要目標是爲文件讀寫提供接口並維護表空間和日誌空間的大小。該層的代碼主要分佈在fil目錄下。InnoDB爲了提供高效的磁盤訪問,採用和REAID0類似的條帶化方法將邏輯快數據分佈到不一樣的幾個物理文件中。

 

MyISAM

MyISAM提供了大量的特性,包括全文索引、壓縮表、空間數據索引等。應該注意的是,MySQL也添加了對InnoDB存儲引擎的全文索引支持。

不支持事務。

不支持行級鎖,只能對整張表加鎖,讀取時會對須要讀到的全部表加共享鎖,寫入時則對錶加排它鎖。但在表有讀取查詢的同事,也能夠往表中插入新的記錄,這被稱爲併發插入。

能夠手工或者自動執行檢查和修復操做,可是和事務恢復以及崩潰恢復不一樣,可能致使一些數據丟失,並且修復操做是很是慢的。

若是指定了DELAY_KEY_WRITE選項,在每次修行執行完成時,不會當即將修改的索引數據寫入磁盤,而是會寫到內存中的鍵緩衝區,只有在清理鍵緩衝區或者關閉表的時候纔會將對應的索引塊寫入磁盤。這種方式能夠極大的提高寫入性能,可是在數據庫或者主機崩潰時會形成索引損壞,須要執行修復操做。

MyISAM設計簡單,數據以緊密格式存儲。對於只讀數據,或者表比較小、能夠容忍修復操做,則依然能夠繼續使用MyISAM。

MyISAM架構:

MyISAM建立表時,目錄通常會生成3個文件:.MYD、.MYI和.frm文件;.MYD存放數據,.MYI存放索引,表結構存放在.frm中。

一、數據文件(.MYD)

數據文件格式相對簡單,即數據和元數據相互穿插存儲。MyISAM支持三種不一樣存儲格式——固定的、動態的和壓縮的。

二、索引文件(.MYI)

MyISAM存儲引擎的每一個表都對應一個MYI文件。MYI文件包含兩部分——頭部信息和索引值。

三、元數據文件(.frm)

MySql中的表,在磁盤上均有一個.frm做爲擴展名的文件於之對應。frm在全部平臺上的格式是同樣的。

比較:

一、事務:InnoDB是事務性的。

二、備份:InnoDB支持在線熱備份。

三、崩潰恢復:MyISAM崩潰後發生損壞的機率比InnoDB高不少,並且恢復的速度也更慢。

四、併發:MyISAM只支持表級鎖,而InnoDB還支持行級鎖。

五、其它特性:MyISAM支持壓縮表和空間數據索引。

相關文章
相關標籤/搜索