MySQL體系結(jié)構(gòu)和存儲引擎概述
一、定義數(shù)據(jù)庫和實例
數(shù)據(jù)庫:
物理操作系統(tǒng)文件或其他形式文件類型的集合。數(shù)據(jù)庫文件可以是frm、MYD、ibd 結(jié)尾的文件。
從概念上來說,數(shù)據(jù)庫是文件的集合,是依照某種數(shù)據(jù)模型組織起來并存放于二級存儲器的數(shù)據(jù)集合;
實例:
MySQL數(shù)據(jù)庫由后臺進(jìn)程以及一個共享內(nèi)存區(qū)組成。共享內(nèi)存可以被運(yùn)行的后臺線程所共享。 需要注意的是,數(shù)據(jù)庫實例才是真正用于操作數(shù)據(jù)庫文件的。
從概念上來說,數(shù)據(jù)庫實例是程序,是位于用戶于操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,用戶對數(shù)據(jù)庫數(shù)據(jù)的任何操作,包括數(shù)據(jù)庫定義、數(shù)據(jù)查詢等都在實例下進(jìn)行,應(yīng)用程序只有通過數(shù)據(jù)庫實例才能和數(shù)據(jù)庫打交道。
PS:MySQL是一個單進(jìn)程多線程架構(gòu)的數(shù)據(jù)庫。也就是說MySQL數(shù)據(jù)庫實例在系統(tǒng)中表現(xiàn)形式就是一個進(jìn)程。
二、MySQL體系結(jié)構(gòu)
根據(jù)上圖可以看出,MySQL由以下幾個部分組成:
1. 連接池組建
2. 管理服務(wù)和工具組建
3. SQL接口組件(SQL Interface)
4. 查詢分析器(Parser)
5. 優(yōu)化器組件(Optimizer)
6. 緩沖組件(Cache & Buffer)
7. 插件式存儲引擎(Pluggable Storage Engines)
8. 物理文件 (File Sysgtem & Logs)
三、MySQL存儲引擎
MySQL與其他數(shù)據(jù)庫對比等一大特點(diǎn)就是獨(dú)有的插件式體系結(jié)構(gòu),而每存儲引擎都有各自的特點(diǎn),能夠根據(jù)具體的業(yè)務(wù)或者應(yīng)用場景建立不同的存儲引擎表。
下面簡單的介紹以下MySQL幾款常見的存儲引擎:
1、InnoDB存儲引擎:
InnoDB存儲引擎支持事務(wù),設(shè)計目標(biāo)主要面向OLTP應(yīng)用,特點(diǎn)是行鎖設(shè)計、支持外鍵。PS:MySQL5.6+開始支持全文索引。
2、MyISAM存儲引擎:
MyISAM存儲引擎不支持事務(wù)、表鎖設(shè)計,支持全文索引,主要面向一些OLAP數(shù)據(jù)庫應(yīng)用。
3、NDB存儲引擎:
NDB存儲引擎是一款集群存儲引擎,特點(diǎn)是將數(shù)據(jù)全部放在內(nèi)存中(MySQL5.1+開始可以將非索引數(shù)據(jù)放在磁盤上)因此主鍵查找的數(shù)據(jù)快,通過添加數(shù)據(jù)存儲節(jié)點(diǎn),可以線性的提高數(shù)據(jù)庫性能,是高可用,高性能的集群系統(tǒng)。
4、Memory存儲引擎:
Memory存儲引擎將表中所有的數(shù)據(jù)放置內(nèi)存中,如果數(shù)據(jù)庫重啟或者崩潰,數(shù)據(jù)將消失。Memory所有默認(rèn)使用哈希索引。
***rchive存儲引擎:
只支持insert 和 select操作, 使用zlib算法將數(shù)據(jù)行(row)壓縮存儲。 非常適合存儲歸檔數(shù)據(jù),如日志信息。
6、Federated
7、Maria
……