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