mysql?體系結(jié)構(gòu)和存儲(chǔ)引擎介紹
1 前言
mysql 是一個(gè)單進(jìn)程多線程架構(gòu)的可移植的數(shù)據(jù)庫,mysql 數(shù)據(jù)庫實(shí)例在系統(tǒng)上的表現(xiàn)就是一個(gè)進(jìn)程,可以在所有的平臺(tái)上運(yùn)行。
mysql 的整體架構(gòu)圖如下圖所示:
2 mysql 配置文件加載順序
mysql 啟動(dòng)會(huì)讀取配置文件,根據(jù)配置文件的參數(shù)啟動(dòng)數(shù)據(jù)庫實(shí)例,數(shù)據(jù)庫的配置文件為my.cnf
,按照/etc/my.cnf -> /etc/mysql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/my.cnf
配置文件進(jìn)行順序加載,如果有相同的配置,則以最后一個(gè)加載的為準(zhǔn),這個(gè)和 springboot
的配置文件加載啟動(dòng)順序是類似的。
3 mysql 引擎介紹
存儲(chǔ)引擎是基于表的,而不是數(shù)據(jù)庫。關(guān)于數(shù)據(jù)庫引擎的語句為:
# 修改數(shù)據(jù)庫引擎的語句 alter table table_name engine=MyISAM; # 查詢數(shù)據(jù)庫可以支持的數(shù)據(jù)庫引擎 show engines
查看數(shù)據(jù)庫支持的引擎結(jié)果如下圖所示:
mysql 存儲(chǔ)引擎有 InnoDB,MyISAM,NDB 引擎,Memory 引擎, Archive 引擎,F(xiàn)ederated 引擎,Maria 引擎。
3.1 InnoDB 引擎
InnoDB 存儲(chǔ)引擎支持事務(wù),其涉及目標(biāo)主要是面向在線事務(wù)處理(OTLP),其特點(diǎn)是支持行鎖和外鍵,并支持非鎖定讀(即讀取數(shù)據(jù)默認(rèn)不會(huì)加鎖),從 mysql 5.5.8 版本開始,InnoDB 存儲(chǔ)引擎就是mysql 的默認(rèn)存儲(chǔ)引擎。
InnoDB 存儲(chǔ)引擎將數(shù)據(jù)存放在一個(gè)邏輯表空間中。InnoDB 通過使用多版本并發(fā)控制(MVCC)來獲得高并發(fā)性的性能,并實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的4中隔離級別,默認(rèn)使用 repeatable 級別。同時(shí) innodb 引擎使用 next-locking 的測了來避免幻讀現(xiàn)象的產(chǎn)生。除此之外,Innodb 引擎還提供了插入緩存,二次寫,自適應(yīng)哈希索引,預(yù)讀等高性能和高可用的功能。
Innodb 存儲(chǔ)引擎采用了聚集的方式,因此每張表都是按照主鍵的順序進(jìn)行存放的。如果沒有顯示的指定表的主鍵,那么存儲(chǔ)引擎會(huì)為每行生成一個(gè)6字節(jié)的 rowid ,并以此作為主鍵使用。
3.2 MyISAM 引擎
MyISAM 存儲(chǔ)引擎不支持事務(wù)、支持表鎖不支持行鎖,支持全文索引,主要面向一些 OLAP 數(shù)據(jù)庫應(yīng)用。數(shù)據(jù)庫系統(tǒng)和文件系統(tǒng)很大的一個(gè)不同點(diǎn)在于對事務(wù)的支持,然而MyISAM存儲(chǔ)引擎不支持事務(wù),InnoDB 引擎支持,其引擎的緩沖池之緩存索引文件,而不緩存數(shù)據(jù)文件,這個(gè)和大多數(shù)的數(shù)據(jù)庫不同。
MyISAM 存儲(chǔ)引擎表是由 MYD 和 MYI 組成的一個(gè)系統(tǒng),前者用于存放數(shù)據(jù)文件,后者是存放索引文件。
3.3 NDB 引擎
NDB 引擎是一個(gè)集群存儲(chǔ)引擎,其結(jié)構(gòu)是 share nothing 的集群架構(gòu),因此能夠提供高可用性。NDB 的特點(diǎn)是數(shù)據(jù)全部存放在內(nèi)存中,因此根據(jù)主鍵查詢的效率速度極快,并且通過添加存儲(chǔ)節(jié)點(diǎn)來提高數(shù)據(jù)庫的性能。該存儲(chǔ)引擎的連接操作是在數(shù)據(jù)庫底層完成的,而不是在存儲(chǔ)引擎層完成的,如果是復(fù)雜的數(shù)據(jù)庫連接需要巨大的網(wǎng)絡(luò)開銷,查詢速度比較慢。
3.4 Archive 引擎
Archive 引擎只支持 insert 和 select 操作,從 mysql5.1 之后開始支持索引,可以使用 zlib 算法進(jìn)行數(shù)據(jù)行的壓縮,壓縮比可以達(dá)到 1:10,改引擎特別適合做數(shù)據(jù)的歸檔操作,比如說日志信息。該引擎使用行鎖來實(shí)現(xiàn)高并發(fā)的插入操作,但是其本身不是事務(wù)安全的,其設(shè)計(jì)目的主要是提供高速插入和壓縮功能。
3.5 Federated 引擎
Federated 存儲(chǔ)引擎并不存放數(shù)據(jù),它只是指向遠(yuǎn)程 mysql 數(shù)據(jù)庫服務(wù)器上的表,改引擎只支持mysql 數(shù)據(jù)庫表,不支持異構(gòu)數(shù)據(jù)表。
3.6 Maria 引擎
Maria 引擎是新開發(fā)的數(shù)據(jù)庫引擎,其設(shè)計(jì)目的是用來取代 MyISAM 引擎,從而成為 MySQL 的默認(rèn)存儲(chǔ)引擎。該引擎的特點(diǎn)是:支持緩存數(shù)據(jù)和索引文件,應(yīng)用了行鎖設(shè)計(jì),提供了 MVCC 功能,支持事務(wù)和非事務(wù)安全的選項(xiàng),以及更好的 BLOB 字符類型的處理性能。
3.7 其它引擎
除了以上提到的數(shù)據(jù)庫引擎外,還有CSV
、Merge
等數(shù)據(jù)庫引擎, 感興趣的可以繼續(xù)關(guān)注學(xué)習(xí)。
4 總結(jié)
到此這篇關(guān)于mysql 體系結(jié)構(gòu)和存儲(chǔ)引擎介紹的文章就介紹到這了,更多相關(guān)mysql 存儲(chǔ)引擎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql 操作總結(jié) INSERT和REPLACE
用于操作數(shù)據(jù)庫的SQL一般分為兩種,一種是查詢語句,也就是我們所說的SELECT語句,另外一種就是更新語句,也叫做數(shù)據(jù)操作語句。2009-07-07mysql如何利用Navicat導(dǎo)出和導(dǎo)入數(shù)據(jù)庫的方法
這篇文章主要介紹了mysql如何利用Navicat導(dǎo)出和導(dǎo)入數(shù)據(jù)庫的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02Mysql 數(shù)字類型轉(zhuǎn)換函數(shù)
Mysql 數(shù)字類型轉(zhuǎn)換函數(shù),有此需要的朋友可以參考下用法。2009-08-08