MySQL數據庫存儲引擎和分支現狀

        (本文於2010.10.01發表在《草根》雜誌第四期,LAMP交流超級羣(500人):106382633)php

        在MySQL經歷了2008年Sun的收購和2009年Oracle收購Sun的過程當中,基本處於停滯發展的狀況,在能夠預見的將來,MySQL是確定會被Oracle擱置而且逐步雪藏消滅掉的。MySQL隨着相應的各主創和內部開發人員的離去,締造了各個不一樣的引擎和分支,讓MySQL有但願繼續發揚光大起來。

本文大體講解一下MySQL目前除了主要的 MyISAM、InnoDB、Heap(Memory)、NDB等引擎以外的其餘引擎的發展和現狀,以及MySQL主幹之外的分支的情況,爲了咱們將來更好的使用MySQL或者其餘分支創建一個瞭解基礎。

MySQL存儲引擎介紹

Falcon存儲引擎

Falcon存儲引擎是MySQL當時寄以厚望的存儲引擎,主要是爲了面對當時Oracle收購了InnoBase公司的狀況,用來取代InnoDB的一個存儲引擎。Falcon引擎的主導人員是數據庫大師Jim Starkey,從2006年開始開發,到2008年發佈Beta版本,至今爲止也沒有走入主流。2008年中旬,Falcon的主架構師Jim Starkey宣佈從MySQL公司辭職,加入了一家創業公司NimbusDB擔任CEO,去設計和開發運行在雲計算上面的關係/語義數據庫,按照2010年目前NoSQL市場的發展來看,他的選擇是正確的,可是帶來的結果是Falcon陷入一個沒有主導人員的地步,致使了至今都屬於性能糟糕,半死不活的狀態。

Falcon引擎是MySQL AB公司基於Netfrastrucure公司的產品開發的(Netfrastrucure公司被MySQL AB收購),Falcon當初的目標是嵌入到MySQL 6.0中用來取代InnoDB引擎,基本不少功能設計都是按照InnoDB的目標去設計的。

Falcon是面向多CPU、擁有大量內存的當代硬件環境和典型Web應用的數據庫操做特色而開發的,主要功能包括多版本併發控制、完善的ACID支持、支持前綴壓縮的B+樹索引、數據頁壓縮(在磁盤上以壓縮形式存儲,在內存中以非壓縮形式存儲)、成組提交等。從功能方面來講沒有什麼新鮮事,大致也就實現了一個事務型存儲引擎必需要有的功能(不少高級的功能如多表空間、分區等都尚未),但其架構上卻有不少獨特之處。

經過網上的一些測試結果Falcon的性能仍是很糟糕的,寫入速度是MyISAM的1/10~1/20,Select的優化也有問題,添加了索引感受還會進行全表掃描。因此,我終究感受Falcon是個杯具的引擎。

Falcon特性:http://dev.mysql.com/doc/falcon/en/se-falcon-features.html 

Falcon測試:http://blog.gslin.org/archives/2008/02/12/1425/ 

Falcon手冊:http://dev.mysql.com/doc/falcon/en/ 

SolidDB存儲引擎

solidDB存儲引擎是由Solid Information Technology(http://www.soliddb.com)開發的,這是一款利用MVCC來實現的事務型存儲引擎。它既同時支持悲觀和樂觀併發控制,這一點其餘的存儲引擎目前都不支持。solibDB的MySQL版本包括對外鍵的徹底支持。它在許多方面與InnoDB很類似,好比它使用了簇索引。solidDB還包括一個沒有額外開銷的在線備份功能。

solidDB公司已經由2008年被IBM收購,主要是用於整合爲IBM數據庫整合方案的一部分,目前是做爲一個前端數據緩存的這麼一個角色存在。IBM收購solidDB公司,主要是由於甲骨文在2005年6月收購了Solid Information Technology主要競爭對手TimesTen,爲了在內存數據庫這塊市場上有所依託,因此收購了solidDB公司。

solidDB產品是一個完整的打包程序,包括solidDB存儲引擎、MyISAM存儲引擎以及MySQL服務器。solidDB與MySQL之間的結合出現於2006年的晚些時候。可是底層的技術以及代碼倒是通過了該公司15年的完善。Solid公司保證和支持了整個產品。它是基於GPL協議的,而且提供了一個相似於MySQL服務器形式的商業版本。

性能上來講,SolidDB for MySQL開源數據庫再次被證實可以徹底知足高吞吐量、關鍵任務級應用對系統性能和可擴展性的要求。

可是就solidDB被IBM收購,MySQL對Oracle收購的狀況來看,基本上solidDB for MySQL是一個無法繼續被MySQL使用的引擎,因此也是一個杯具的MySQL引擎。

官方網站:http://www.ibm.com/software/data/soliddb/ 

XtraDB存儲引擎

XtraDB存儲引擎是percona公司對於innodb存儲引擎進行改進增強後的產品,第一個版本發佈於2008年末。XtraDB兼容innodb的全部特性,而且在IO性能,鎖性能,內存管理等多個方面進行了加強。

Percona是一個MySQL技術諮詢公司,他們有一個在MySQL領域頗有名的技術博客叫作Mysql Performance Blog,同時他們編寫了一本頗有名的MySQL書叫作《High Performance MySQL》,目前也出版了中文版。他們公司還有一個頗有名的MySQL備份工具叫作XtraBackup。

XtraDB的設計目標也是取代InnoDB做爲目標,它是基於InnoDB來作的開發,XtraDB 100%的兼容InnoDB,一般能夠認爲XtraDB是InnoDB的升級或者替代版本。在性能上來講,目前XtraDB是很是高的,在大部分狀況下也是比較穩定的,值得你嘗試使用。一樣XtraDB也是將來感受頗有前途的一個存儲引擎,值得咱們期待。

性能測試:

http://www.mysqlperformanceblog.com/2009/07/14/performance-improvements-in-percona-5-0-83-and-xtradb/      

使用狀況:http://www.ningoo.net/html/2009/xtradb_storage_engine.html      

引擎介紹:http://www.percona.com/docs/wiki/percona-xtradb:start 

引擎下載:http://www.percona.com/percona-builds/Percona-XtraDB/    

公司官網:http://www.percona.com      

性能博客:http://www.mysqlperformanceblog.com  

Maria存儲引擎

Maria由MySQL的創始人,MyISAM的做者Monty(Michael Widenius)開發,命名爲Maria是由於他的第三個小孩就叫Maria。Maria是Monty在MySQL公司的時候就開始開發的一個MySQL的分支引擎,Sun收購MySQL後,由於與Sun針對MySQL團隊的一些問題不和,而後在2009年初離開了Sun,成立了Monty Program Ab公司,專門用於針對Maria引擎的開發,同時開發了一個MySQL的分支,叫作MariaDB。

Maria是一個MySQL的存儲引擎,利用它來擴展MyISAM使之在異常退出時文件不至於損壞。Maria的主要目的是做爲更好的MyISAM,提供崩潰後的故障恢復功能。更長遠的目標是成爲一個全功能的事務型存儲引擎,支持ACID、回滾、多版本併發控制、行級鎖、成組提交,同時也能夠選擇不支持事務,最終代替MyISAM成爲MySQL的默認存儲引擎。

目前Maria引擎有針對MySQL5.1的版本,基本上就是一個增長了崩潰恢復功能的MyISAM,使用表級鎖,但能夠作到讀寫不衝突,即在進行任何類型的更新操做的同時均可以進行讀操做,但多個寫操做不能併發。

Maria的特色:

1. 多版本併發控制,ACID支持

2. 經過拷貝日誌就能進行加強備份

3. 高效的磁盤存儲

Maria引擎開發之初就是用來取代MyISAM的存儲引擎,而且目前按照我瞭解有些在使用公司的狀況,運行狀況挺不錯,你們也能夠嘗試一下。Maria在目前有MySQL創始人帶領的狀況下,也是一個很是有前途的的存儲引擎,值得期待。

Maria下載:http://askmonty.org/wiki/MariaDB:Download      

Maria手冊:http://askmonty.org/wiki/Maria 

PrimeBase XT(PBXT)存儲引擎

PBXT是PrimeBase公司推出的MySQL插件引擎,其功能和InnoDB相似,它是一款事務型存儲引擎,而且它的設計是很獨特的。它的一個很不同凡響的特徵就是如何來使用事務日誌和數據文件來防止「write-ahead」日誌,這能夠極大的減小事務提交的開銷。這個架構給了PBXT很大的提升寫併發的空間,而且測試也代表它在某些特定的操做下比InnoDB要快。PBXT也使用了MVCC而且支持外鍵約束,可是它不使用簇索引。

主要特性以下:

MVCC的:多版本併發控制,使讀操做沒有鎖定

事務性:支持啓動開始,COMMIT和ROLLBACK和恢復上

ACID標準:原子性,一致性,隔離,持久(一次提交的更改不能丟失) 

行級鎖定:更新使用行級鎖的併發容許最大併發量 

死鎖檢測:當即通知若是客戶端進程已陷入死鎖 

參照完整性:外鍵的支持。

寫一次:PBXT避免的架構雙寫入使用日誌。 

BLOB的流:在結合的BLOB Streaming engine。

按照有人的測試結果來看,PBXT存儲引擎版本的TPS隨着線程數的增加,表現比較穩定,性能上與innodb差很少,長期來看,它的目標也是做爲一個可以取代InnoDB的存儲引擎。並且目前MariaDB這個分支已經把PBXT做爲內置的存儲引擎,因此也是能夠嘗試使用的一個引擎。

性能測試:http://imysql.cn/2008_07_25_innodb_vs_pbxt  

引擎下載:http://www.primebase.org/download/index.php  

官方網站:http://www.primebase.org     

MySQL分支介紹

MariaDB數據庫

MariaDB 是一個採用Maria存儲引擎的MySQL分支版本,是由原來MySQL的做者Michael Widenius(Monty)創辦的Monty Program Ab公司所開發的免費開源的數據庫服務器。基本上MariaDB的歷史跟我上面講的Maria存儲引擎歷史同樣。MariaDB的設計目標就是用來取代MySQL Server。Monty是開源數據庫聯盟(Open Database Alliance)的發起者,因此MariaDB也是開源數據庫聯盟的成員。

MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的XtraDB引擎來替換InnoDB,MariaDB的存儲引擎還包括了PrimeBase XT(PBXT)和FederatedX存儲引擎,MariaDB基於GPL2.0發佈。

Monty Widenius提供了MySQL的分支MariaDB候選版本。MariaDB 5.1徹底兼容MySQL5.1,這個版本早在2008年11月就發佈了,增長了不少新的功能和若干個新的補丁程序。開發者稱這個候選版本很是穩定。基本上MySQL,MariaDB解決了不少問題,例如「pool of threads」功能提供解決多數據鏈接問題。目前MariaDB發佈的Release版本是5.1.44,基本上應該是跟 MySQL5.1的版本兼容的。

MariaDB 基本上名門以後,加上MySQL創始人Monty的實力和號召力,是做爲MySQL一個很是好的替代品,前途發展無限,值得咱們嘗試使用。

MariaDB中存儲引擎介紹:

Maria:http://askmonty.org/wiki/Maria  

XtraDB:http://www.percona.com/docs/wiki/percona-xtradb:start   

PBXT:http://www.primebase.org/   

FederatedX:https://launchpad.net/federatedx      

MariaDB下載:http://askmonty.org/wiki/MariaDB:Download 

MariaDB網站:http://askmonty.org  

Drizzle數據庫

Drizzle,是從MySQL衍生出來的一個數據庫服務器,一個精簡版的MySQL分支,Drizzle項目的宗旨是構建一個「更精練、更輕量、更快速」的MySQL版本,它的擴展性和易用性與MySQL至關,但爲了提升性能和擴展性,它從原來的核心繫統裏移除了部分功能。Drizzle也是開源數據庫聯盟(Open Database Alliance)成員。

MySql的架構設計總監Brian Aker在O'Reilly開放源碼大會(OSCON)上對Drizzle作了介紹。Drizzle是一個能爲某些特定類別的應用提供支持的數據庫項目("what if" project)。Drizzle的設計目標:

1. Web應用 

2. 雲計算組件 

3. 沒有業務邏輯的數據庫(又名存儲過程) 

4. 多核架構

Drizzle,一個精簡版的MySQL分支,在目前的MySQL代碼基本之上,將存儲過程、視圖、觸發器、查詢緩存、PREPARE語句等等沒什麼必要的功能從代碼中刪掉,簡化對數據類型和存儲引擎的支持,而且進行大膽的重構。最終要實現的目的是將MySQL的代碼大大簡化,理順MySQL的架構,改善 MySQL的代碼質量,提升系統的穩定性和性能。將更適合Web應用、雲計算組件、沒有業務邏輯的數據庫(又名存儲過程)、多核架構等業務。

Drizzle的特徵有:

¨ 基於MySQL6.0的源碼樹 

¨ 無附加庫

¨ 遵照POSIX 

¨ 微內核設計 

¨ 可插拔架構,適用於視圖、存儲過程、UDF、存儲引擎等 

¨ 跨多個節點的Sharding技術 

¨ 智能代理 

¨ 多CPU/多核CPU 

¨ 優化的字段類型 

¨ 高效的內存使用 

¨ 沒有內部ACL,使用LDAP/PAM 

¨ 沒有數據庫數據格式化 

¨ 整理有序的Make系統 

¨ 缺省存儲引擎爲InnoDB 

¨ 移除Windows兼容性 

Drizzle缺省的存儲引擎是InnoDB,支持的數據類型更少,基本上設計目標跟MariaDB徹底不一樣。MariaDB的設計目標是一個取代MySQL的數據庫,而Drizzle基本上是一個除了MySQL以外你能夠選擇的產品,而且基本上設計目標是針對將來的雲計算和分佈式Web存儲的方向去的,目前可能不是太穩定,不適合在運營環境使用,可是至關的值得期待。

Drizzle使用:http://database.51cto.com/art/200907/137239.htm 

Drizzle下載:https://launchpad.net/drizzle    

Drizzle網站:http://drizzle.org/    

總結語

基本上來講,目前MySQL仍是主流(MyISAM/InnoDB),可是將來發展不可預測,而且有這些除了MySQL以外的選擇,也許有一天Oracle把MySQL完全消滅掉了,可是咱們一樣還有MariaDB、Drizzle能夠選擇,這就是開源的力量。


對比幾個MySQL的存儲引擎,Maria和XtraDB是值得你們目前投入逐步使用的行列的,多作一些測試,灰度放亮,得到一個合理結果真後再使用是比較合適的。MySQL的數據庫分支來講,MariaDB也是比較值得嘗試使用的,畢竟目前Drizzle還不是太成熟穩定,而且不必定適合你所作的業務。我所瞭解國內部分互聯網公司也有在使用MariaDB的,而且效果不錯,你們也均可以按照本身的狀況來使用。

目前NoSQL運動如火如荼,有些業務更適合採用Key==>Value或這是BigTable類型的數據存儲方式,也許MySQL不是最好的,固然選擇最合適存儲,也許將來大部分數據庫市場會被NoSQL所佔領,可是我以爲關係型數據庫仍是將來幾年很重要的存儲方式。

在MySQL被Sun收購,已經Sun被Oracle收購的過程當中,整個開源世界都是在翻天覆地的變化,特別是MySQL的命運一直都是全部使用和熱愛開源數據庫的人們所關注的,在這些商業競爭中,那些開源鬥士(好比Monty),都經過別的方式,繼續發揚了MySQL這種開源數據庫。咱們長期來看,總會有一些東西會消失,好比Falcon存儲引擎,有些東西會繼續發展,好比MariaDB或Drizzle,可是這些都爲開源技術作出了貢獻,也爲數據庫領域增添了色彩。
html

相關文章
相關標籤/搜索