一. MySQL體系結(jié)構(gòu)1. 連接層最上層是一些客戶端和鏈接服務(wù),,包含本地sock通信和大多數(shù)基于客戶端/服務(wù)端工具實(shí)現(xiàn)的類似于TCP/IP的通信。主要完成一些類似于連接處理,、授權(quán)認(rèn)證及相關(guān)的安全方案,。在該層上引入了線程池的概念,為通過(guò)認(rèn)證安全接入的客戶端提供線程,。同樣在該層上可以實(shí)現(xiàn)基于SSL的安全鏈接,。服務(wù)器也會(huì)為安全接入的每個(gè)客戶端驗(yàn)證它所具有的操作權(quán)限。 2. 服務(wù)層第二層架構(gòu)主要完成大多數(shù)的核心服務(wù)功能,,如SQL接口,,并完成緩存的查詢,,SQL的分析和優(yōu)化,部分內(nèi)置函數(shù)的執(zhí)行,。所有跨存儲(chǔ)引擎的功能也在這一層實(shí)現(xiàn),,如過(guò)程、函數(shù)等,。在該層,,服務(wù)器會(huì)解析查詢并創(chuàng)建相應(yīng)的內(nèi)部解析樹(shù),并對(duì)其完成相應(yīng)的優(yōu)化如確定表的查詢順序,,是否利用索引等,,最后生成相應(yīng)的執(zhí)行操作。如果是select語(yǔ)句,,服務(wù)器還會(huì)查詢內(nèi)部的緩存,,如果緩存空間足夠大,這樣在解決大量讀操作的環(huán)境中能夠很好的提升系統(tǒng)的性能,。 3. 引擎層存儲(chǔ)引擎層,,存儲(chǔ)引擎真正的負(fù)責(zé)了MySQL中數(shù)據(jù)的存儲(chǔ)和提取,服務(wù)器通過(guò)API和存儲(chǔ)引擎進(jìn)行通信,。不同的存儲(chǔ)引擎具有不同的功能,,這樣我們可以根據(jù)自己的需求來(lái)選取合適的存儲(chǔ)引擎。數(shù)據(jù)庫(kù)中的索引是在存儲(chǔ)引擎層實(shí)現(xiàn)的,。 4. 存儲(chǔ)層數(shù)據(jù)存儲(chǔ)層,,主要是將數(shù)據(jù)(如:redolog、undolog,、數(shù)據(jù),、索引、二進(jìn)制日志,、錯(cuò)誤日志,、查詢?nèi)罩尽⒙樵內(nèi)罩镜龋┐鎯?chǔ)在文件系統(tǒng)之上,,并完成與存儲(chǔ)引擎的交互,。 和其他數(shù)據(jù)庫(kù)相比,,MySQL有點(diǎn)與眾不同,,它的架構(gòu)可以在多種不同場(chǎng)景中應(yīng)用并發(fā)揮良好作用。主要體現(xiàn)在存儲(chǔ)引擎上,,插件式的存儲(chǔ)引擎架構(gòu),,將查詢處理和其他的系統(tǒng)任務(wù)以及數(shù)據(jù)的存儲(chǔ)提取分離。這種架構(gòu)可以根據(jù)業(yè)務(wù)的需求和實(shí)際需要選擇合適的存儲(chǔ)引擎,。 二. 存儲(chǔ)引擎介紹存儲(chǔ)引擎就是存儲(chǔ)數(shù)據(jù),、建立索引,、更新/查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方式。存儲(chǔ)引擎是基于表的,,而不是基于庫(kù)的,,所以存儲(chǔ)引擎也可稱為表類型。我們可以在創(chuàng)建表的時(shí)候,,來(lái)指定選擇的存儲(chǔ)引擎,,如果沒(méi)有指定將自動(dòng)選擇默認(rèn)的存儲(chǔ)引擎。 1. 建表時(shí)指定存儲(chǔ)引擎
(1). 案例1:查詢建表語(yǔ)句 --- 默認(rèn)存儲(chǔ)引擎:InnoDB
2. 查詢當(dāng)前數(shù)據(jù)庫(kù)支持的存儲(chǔ)引擎
(1). 案例1:創(chuàng)建表my_myisam,,并指定MyISAM存儲(chǔ)引擎
(2). 創(chuàng)建表my_memory,,指定Memory存儲(chǔ)引擎
三. 存儲(chǔ)引擎特點(diǎn)1. InnoDB(1). 介紹InnoDB是一種兼顧高可靠性和高性能的通用存儲(chǔ)引擎,在MySQL 5.5之后,,InnoDB是默認(rèn)的MySQL存儲(chǔ)引擎,。 (2). 特點(diǎn)
(3). 文件xxx.ibd:xxx代表的是表名,innoDB引擎的每張表都會(huì)對(duì)應(yīng)這樣一個(gè)表空間,,存儲(chǔ)該表的表結(jié)構(gòu)(frm-早期的,、sdi-新版的)、數(shù)據(jù)和索引,。 參數(shù):innodb_file_per_table
如果該參數(shù)開(kāi)啟,,代表對(duì)于InnoDB引擎的表,每一張表都對(duì)應(yīng)一個(gè)ibd文件,。我們直接打開(kāi)MySQL的數(shù)據(jù)存放目錄,,這個(gè)目錄下有很多文件夾,不同的文件夾代表不同的數(shù)據(jù)庫(kù),,我們直接打開(kāi)yun3k文件夾,。 可以看到里面有很多的idb文件,每一個(gè)ibd文件就對(duì)應(yīng)一張表,,比如:我們有一張表account,,就會(huì)有這樣一個(gè)account.ibd文件,而在這個(gè)ibd文件中不僅存放表結(jié)構(gòu),、數(shù)據(jù),、還會(huì)存放該表對(duì)應(yīng)的索引信息。而該文件是基于二進(jìn)制存儲(chǔ)的,,不能直接基于記事本打開(kāi),,我們可以使用mysql提供的一個(gè)指令ibd2sdi,,通過(guò)該指令就可以從ibd文件中提取sdi信息,而sdi數(shù)據(jù)字典信息中就包含該表的表結(jié)構(gòu),。 (4). 邏輯存儲(chǔ)結(jié)構(gòu)
2. MyISAM(1). 介紹MyISAM是MySQL早期的默認(rèn)存儲(chǔ)引擎。 (2). 特點(diǎn)不支持事務(wù),,不支持外鍵 支持表鎖,,不支持行鎖 訪問(wèn)速度快 (3). 文件xxx.sdi:存儲(chǔ)表結(jié)構(gòu)信息 xxx.MYD:存儲(chǔ)數(shù)據(jù) xxx.MYI:存儲(chǔ)索引 3. Memory(1). 介紹Memory引擎的表數(shù)據(jù)是存儲(chǔ)在內(nèi)存中的,由于受到硬件問(wèn)題或斷電問(wèn)題的影響,,只能將這些表作為臨時(shí)表或緩存使用,。 (2). 特點(diǎn)內(nèi)存存放 hash索引(默認(rèn)) (3). 文件xxx.sdi:存儲(chǔ)表結(jié)構(gòu)信息 4. InnoDB、MyISAM和Memory的區(qū)別及特點(diǎn)
四. 存儲(chǔ)引擎的選擇在選擇存儲(chǔ)引擎時(shí),,應(yīng)該根據(jù)應(yīng)用系統(tǒng)的特點(diǎn)選擇合適的存儲(chǔ)引擎,。對(duì)于復(fù)雜的應(yīng)用系統(tǒng),還可以根據(jù)實(shí)際情況選擇多種存儲(chǔ)引擎進(jìn)行結(jié)合,。
|
|
來(lái)自: 云哥技術(shù)yun3k > 《mysql》