mysql集群数据引擎_MySQL数据引擎
InnoDB存儲(chǔ)引擎
該引擎是MySQL數(shù)據(jù)庫的默認(rèn)事務(wù)型引擎,它被設(shè)計(jì)用來處理大量短期事務(wù)(絕大多數(shù)正常提交,很少回滾)
InnoDB的數(shù)據(jù)存儲(chǔ)在表空間中,表空間是由InnoDB管理的一個(gè)黑盒子,由一系列的數(shù)據(jù)文件組成,在MySQL4.1之后的版本中,InnoDB可以將每個(gè)表的數(shù)據(jù)和索引存放在單獨(dú)的文件中。InnoDB也可以使用裸設(shè)備作為表空間的存儲(chǔ)介質(zhì)(現(xiàn)在已無必要)。InnoDB采用MVCC來支持高并發(fā),并實(shí)現(xiàn)了其中的四個(gè)隔離級(jí)別,默認(rèn)級(jí)別為可重復(fù)讀,并通過間隙鎖策略來防止幻讀的出現(xiàn)。間隙鎖使得InnoDB不僅僅鎖定查詢涉及的行,還會(huì)對(duì)索引中的間隙進(jìn)行鎖定,以防止幻影行的插入。InnoDB表是基于聚簇索引建立的,InnoDB的索引結(jié)構(gòu)和MySQL的其他存儲(chǔ)引擎有非常大的不同,聚簇索引對(duì)主鍵查詢有非常高的性能。不過它的二級(jí)索引中必須包含主鍵列,所以如果主鍵列非常大的話,其他的索引都會(huì)很大。(表上的索引如果特別多的話,主鍵列應(yīng)當(dāng)盡可能的小)。InnoDB的數(shù)據(jù)存儲(chǔ)格式是平臺(tái)獨(dú)立的。
InnoDB內(nèi)部已經(jīng)做了許多的優(yōu)化,包括從磁盤讀取數(shù)據(jù)時(shí)候采用的可預(yù)測(cè)性讀,能夠自動(dòng)在內(nèi)存中建立hash索引以加速讀操作,加速插入操作的插入緩沖區(qū)等。作為事務(wù)型存儲(chǔ)引擎,InnoDB通過一些機(jī)制和工具支持真正的熱備份,MySQL的其他存儲(chǔ)引擎不支持熱備份。
MyISAM存儲(chǔ)引擎
MySQL5.1及之前的版本,MyISAM是默認(rèn)的存儲(chǔ)引擎。MyISAM提供了大量的特性,包括全文索引、壓縮、空間函數(shù)(GIS),但MyISAM不支持事務(wù)和行級(jí)鎖,并且崩潰后無法安全恢復(fù)。
MyISAM會(huì)將表存儲(chǔ)在兩個(gè)文件中:數(shù)據(jù)文件(.MYD)和索引文件(.MYI)。
MyISAM對(duì)整張表加鎖,而不是針對(duì)行。讀取時(shí)間會(huì)對(duì)需要讀到的所有表加共享鎖,寫入時(shí)則對(duì)表加排它鎖。但是在表有讀取查詢的同時(shí),也可以往表中插入新的記錄(并發(fā)插入)。對(duì)于MyISAM表,MySQL可以手工或者自動(dòng)執(zhí)行檢查和修復(fù)操作。執(zhí)行表的修復(fù)可能導(dǎo)致一些數(shù)據(jù)的丟失,而且修復(fù)速度是非常慢的。 對(duì)于MyISAM表,即使是BLOB和TEXT這種長(zhǎng)字段,也可以基于前500個(gè)字符創(chuàng)建索引。創(chuàng)建MyISAM表的時(shí)候,如果指定了DELAY_KEY_WRITE選項(xiàng),在每次修改執(zhí)行完成時(shí),不會(huì)立即寫回到磁盤,而是會(huì)寫到內(nèi)存中的鍵緩沖區(qū),只有在清理鍵緩沖區(qū)或者關(guān)閉表的時(shí)候才會(huì)將對(duì)應(yīng)的索引塊寫入到磁盤。
如果表在創(chuàng)建并導(dǎo)入數(shù)據(jù)之后,不會(huì)再進(jìn)行修改操作,那么這樣的表或許適合采用MyISAM壓縮表。壓縮表是不能進(jìn)行修改的(除非解壓修改再壓縮)。壓縮表可以極大減少磁盤空間的占用,因此也可以減少磁盤I/O,從而提升查詢性能。壓縮表也同樣支持索引,但索引也只能是只讀的。
MyISAM引擎設(shè)計(jì)簡(jiǎn)單,數(shù)據(jù)以緊密格式存儲(chǔ),所以在某些場(chǎng)景下性能良好。MyISAM有一些服務(wù)器級(jí)別的性能擴(kuò)展限制。
Archive引擎
該引擎只支持Insert和Select操作,Archive引擎會(huì)緩存所有的寫并利用zlib對(duì)插入的數(shù)據(jù)進(jìn)行壓縮,所以比MyISAM表的磁盤I/O更少,但是每次Select都需要執(zhí)行全表掃描。(適合數(shù)據(jù)采集以及日志)
Archive引擎支持行級(jí)鎖和專用的緩沖區(qū),可以實(shí)現(xiàn)高并發(fā)插入。
Blackhole引擎
該引擎沒有實(shí)現(xiàn)任何存儲(chǔ)機(jī)制,它會(huì)丟棄所有插入的數(shù)據(jù),不做任何保存,但服務(wù)器會(huì)記錄Blackhole表的日志,所以可以用于復(fù)制數(shù)據(jù)到備份數(shù)據(jù)庫。
CSV引擎
可以將普通的CSV文件作為MySQL的表來處理,但這種表不支持索引。CSV引擎可以在數(shù)據(jù)庫運(yùn)行時(shí)拷入或者拷出文件。CSV引擎作為一種數(shù)據(jù)交換的機(jī)制,非常有用。
Federated引擎
該引擎是訪問其他MySQL服務(wù)器的一個(gè)代理,它會(huì)創(chuàng)建一個(gè)到遠(yuǎn)程MySQL服務(wù)器的客戶端連接,并將查詢傳輸?shù)竭h(yuǎn)程服務(wù)器執(zhí)行,然后提取或者發(fā)送需要的數(shù)據(jù)。
Memory引擎
如果需要快速地訪問數(shù)據(jù),并且這些數(shù)據(jù)不會(huì)被修改,重啟以后丟失也沒有關(guān)系,那么可以使用Memory表。所有的數(shù)據(jù)都可以存儲(chǔ)在內(nèi)存中,不需要進(jìn)行磁盤I/O。Memory表的結(jié)構(gòu)在重啟以后還會(huì)保留,但是數(shù)據(jù)會(huì)丟失。
Memory表支持Hash索引,因此查找操作非???。Memory是表級(jí)鎖,因此并發(fā)寫入的性能比較低,不支持BLOB或者TEXT類型的列,并且每一行的長(zhǎng)度是固定的,因此可能導(dǎo)致內(nèi)存浪費(fèi)。
如果MySQL在執(zhí)行查詢的過程中需要使用臨時(shí)表來存儲(chǔ)中間結(jié)果,內(nèi)部使用的臨時(shí)表就是Memory表。如果中間結(jié)果太大超過了Memory表的限制,或者含有BLOB或者TEXT字段,則臨時(shí)表會(huì)轉(zhuǎn)換成MyISAM表。
Merge引擎
該引擎是MyISAM引擎的一個(gè)變種,由多個(gè)MyISAM表合并而來的虛擬表。
NDB集群引擎
MySQL集群使用的引擎。
選擇合適的引擎
除非需要用到某些InnoDB不具備的特性,并且沒有其他的辦法可以替代,否則都應(yīng)該優(yōu)先選擇InnoDB引擎。
事務(wù) 如果應(yīng)用需要事務(wù)的支持,那么InnoDB是目前最好的選擇,如果不需要事務(wù),并且主要的是Insert和Select的話,那么MyISAM是不錯(cuò)的選擇。
備份 如果可以定期地關(guān)閉服務(wù)器來執(zhí)行備份,那么備份的因素可以忽略。反之,如果需要在線熱備份,那么選擇InnoDB就是基本的要求。
崩潰恢復(fù) 數(shù)據(jù)量比較大的時(shí)候,系統(tǒng)崩潰后如何快速地恢復(fù)是一個(gè)需要考慮的問題。
特有的特性 有些應(yīng)用可能依賴一些存儲(chǔ)引擎所獨(dú)有的特性或者優(yōu)化。
總結(jié)
以上是生活随笔為你收集整理的mysql集群数据引擎_MySQL数据引擎的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql insert 1062_一则
- 下一篇: python封装c++_用pybind1