第一章 MySQL體系結(jié)構(gòu)和存儲(chǔ)引擎
1.1 mysql中“數(shù)據(jù)庫(kù)”和“實(shí)例”的概念如何區(qū)分
數(shù)據(jù)庫(kù):
數(shù)據(jù)的結(jié)構(gòu)組織形式愤估,數(shù)據(jù)在機(jī)器上的文件集合
實(shí)例:
操作這些文件集合的程序莺债,mysql是一個(gè)主進(jìn)程控制多個(gè)線程的程序(單進(jìn)程多線程的架構(gòu))迈着。
1.2 mysql的架構(gòu)圖
有個(gè)簡(jiǎn)書的博客寫的挺清晰:MySQL體系架構(gòu)
外部有個(gè)連接層Connectors浊竟,向不同的編程語(yǔ)言提供交互接口
內(nèi)部的MySQL Server從上到下有多個(gè)模塊:
- 管理服務(wù)和工具
各種為mysql各個(gè)組件提供的工具暴氏,如監(jiān)控、配置芙委、恢復(fù)、備份等 - 連接池
鑒定權(quán)限狂秦,線程重用灌侣,鏈接限制等,內(nèi)存裂问、緩沖檢查等 - SQL接口(DDL,DML侧啼,存儲(chǔ)過(guò)程,視圖愕秫,觸發(fā)器等)
這里DDL和DML的區(qū)別慨菱?
DDL: Data Define Language,數(shù)據(jù)定義語(yǔ)言戴甩,指一些維護(hù)數(shù)據(jù)表或數(shù)據(jù)庫(kù)的屬性的操作符喝,如CREATE、ALTER甜孤、DROP
DML:Data Manipulation Language协饲,數(shù)據(jù)控制語(yǔ)言,指對(duì)數(shù)據(jù)的操作指令缴川,如增刪查改:SELECT茉稠、UPDATE、INSERT把夸、DELETE - Parser
對(duì)query的解析 - Optimizer
優(yōu)化器而线,實(shí)現(xiàn)對(duì)query和索引的優(yōu)化,簡(jiǎn)化sql等 - 緩存和緩沖區(qū)管理
對(duì)全局和引擎層的緩存恋日、緩沖管理 - 存儲(chǔ)引擎層
mysql的存儲(chǔ)引擎是插件化的膀篮,任何開(kāi)發(fā)者都可以開(kāi)發(fā)自己的存儲(chǔ)引擎。存儲(chǔ)引擎是mysql服務(wù)器和底層數(shù)據(jù)文件的橋梁岂膳,通過(guò)mysql的API和mysql服務(wù)器交互誓竿,不同的存儲(chǔ)引擎實(shí)現(xiàn)了邏輯,具有各自不同的特點(diǎn)谈截。 - 文件系統(tǒng)和日志
mysql管理的數(shù)據(jù)最終還是落盤在系統(tǒng)文件系統(tǒng)上的筷屡。
3. 不同存儲(chǔ)引擎的差異
當(dāng)前被證明適合互聯(lián)網(wǎng)公司應(yīng)對(duì)高并發(fā)的引擎:InnoDB
官網(wǎng)對(duì)InnoDB特性解讀的tutorial鏈接:官網(wǎng)介紹InnoDB
維基百科中對(duì)不同存儲(chǔ)引擎的對(duì)比:維基百科:mysql存儲(chǔ)引擎的對(duì)比
再參考InnoDB vs. MyISAM – A Comparison of Pros and Cons可以總結(jié)以下特點(diǎn):
1、MyISAM設(shè)計(jì)簡(jiǎn)單簸喂,只支持表級(jí)鎖(因此對(duì)于頻繁插入和更新的請(qǐng)求來(lái)說(shuō)速度比InnoDB慢)毙死,不支持事務(wù),支持地理位置索引娘赴,支持全文索引规哲,對(duì)于簡(jiǎn)單的系統(tǒng)來(lái)說(shuō)性能比InnoDB強(qiáng),尤其適用于很多“讀”請(qǐng)求(read-intensive (select))的場(chǎng)景诽表,是一種設(shè)計(jì)服務(wù)于OLAP(OnLine Analytical Processing)場(chǎng)景的存儲(chǔ)引擎唉锌。
2、InnoDB更復(fù)雜竿奏,耗費(fèi)更多的系統(tǒng)資源袄简,數(shù)據(jù)一致性更好,支持了行級(jí)鎖(更適合寫頻繁的場(chǎng)景:write-intensive (inserts, updates))泛啸,支持事務(wù)绿语,不支持地理位置索引,5.6后才支持全文索引候址,服務(wù)于OLTP(OnLine Transaction Processing)場(chǎng)景的存儲(chǔ)引擎吕粹,另外InnoDB的MVCC機(jī)制(MultiVersion Concurrency Control,多版本并發(fā)控制) 使得他具有很好的高并發(fā)特性岗仑。
3匹耕、Memory引擎,把表的數(shù)據(jù)全放在內(nèi)存中荠雕,數(shù)據(jù)庫(kù)重啟或崩潰稳其,表中的數(shù)據(jù)將丟失,只適用于存儲(chǔ)臨時(shí)數(shù)據(jù)炸卑,它默認(rèn)使用哈希索引既鞠。值得注意的是,mysql使用memory引擎存儲(chǔ)中間結(jié)果集盖文,如果中間結(jié)果集大小大于memory引擎表的容量上限或含有memory引擎不支持的TEXT或BLOB類型嘱蛋,則mysql會(huì)把數(shù)據(jù)轉(zhuǎn)存到MyISAM存儲(chǔ)引擎表而存到磁盤上,這樣的臨時(shí)表顯然會(huì)拖慢查詢執(zhí)行速度五续。
4洒敏、連接mysql的方式:進(jìn)程間通信
進(jìn)程間通信的幾種方式:管道,命名管道返帕,命名字桐玻,TCP/IP套接字,UNIX域套接字
這個(gè)我得好好復(fù)習(xí)下荆萤,開(kāi)個(gè)專題镊靴。。链韭。
書上交代了mysql交互的幾種進(jìn)程間通信方式:
- TCP/IP套接字
網(wǎng)絡(luò)中使用的最多的通信方式偏竟,我們使用的命令行就是該方式來(lái)通信的 - 命名管道(named pipe)和共享內(nèi)存(shared memory)
主要用于同一臺(tái)服務(wù)器上的進(jìn)程通信 - UNIX域套接字
UNIX域套接字不是一個(gè)網(wǎng)絡(luò)協(xié)議,因此也只適用于同一臺(tái)服務(wù)器上的進(jìn)程通信