MySQL數(shù)據(jù)庫存儲引擎和分支現(xiàn)狀
MySQL以前的發(fā)展是值得肯定的,發(fā)展也是相當(dāng)成功的,然而,在MySQL經(jīng)歷了2008年Sun的收購和2009年Oracle收購Sun的過程中,MySQL的步伐基本處于停滯發(fā)展的情況,在可以預(yù)見的未來,MySQL是肯定會被Oracle擱置并且逐步雪藏消滅掉的。MySQL隨著相應(yīng)的各主創(chuàng)和內(nèi)部開發(fā)人員的離去,締造了各個不同的引擎和分支,讓MySQL有希望繼續(xù)發(fā)揚光大起來。
本文大致講解一下MySQL目前除了主要的 MyISAM、InnoDB、Heap(Memory)、NDB 等引擎之外的其他引擎的發(fā)展和現(xiàn)狀,以及MySQL主干以外的分支的狀況,為了我們未來更好的使用MySQL或者其他分支建立一個了解基礎(chǔ)。
要了解主要存儲引擎,請參考手冊:http://dev.mysql.com/doc/refman/5.1/zh/index.html
MySQL存儲引擎介紹:
Falcon存儲引擎
Falcon存儲引擎是MySQL當(dāng)時寄以厚望的存儲引擎,主要是為了面對當(dāng)時Oracle收購了InnoBase公司的情況,用來取代InnoDB的一個存儲引擎。Falcon引擎的主導(dǎo)人員是大師Jim Starkey,從2006年開始開發(fā),到2008年發(fā)布Beta版本,至今為止也沒有走入主流。2008年中旬,F(xiàn)alcon的主架構(gòu)師Jim Starkey宣布從MySQL公司辭職,加入了一家創(chuàng)業(yè)公司NimbusDB擔(dān)任CEO,去設(shè)計和開發(fā)運行在云計算上面的關(guān)系/語義數(shù)據(jù)庫,按照2010年目前NoSQL市場的發(fā)展來看,他的選擇是正確的,但是帶來的結(jié)果是Falcon陷入一個沒有主導(dǎo)人員的地步,導(dǎo)致了至今都屬于性能糟糕,半死不活的狀態(tài)。
Falcon引擎是MySQL AB公司基于Netfrastrucure公司的產(chǎn)品開發(fā)的(Netfrastrucure公司被MySQL AB收購),F(xiàn)alcon 當(dāng)初的目標(biāo)是嵌入到MySQL 6.0中用來取代InnoDB引擎,基本很多功能設(shè)計都是按照InnoDB的目標(biāo)去設(shè)計的。
Falcon是面向多CPU、擁有大量內(nèi)存的當(dāng)代硬件環(huán)境和典型Web應(yīng)用的 數(shù)據(jù)庫操作特點而開發(fā)的,主要功能包括多版本并發(fā)控制、完善的ACID支持、支持前綴壓縮的B+樹索引、數(shù)據(jù)頁壓縮(在磁盤上以壓縮形式存儲,在內(nèi)存中以 非壓縮形式存儲)、成組提交等。從功能方面來說沒有什么新鮮事,大體也就實現(xiàn)了一個事務(wù)型存儲引擎必須要有的功能(很多高級的功能如多表空間、分區(qū)等都還 沒有),但其架構(gòu)上卻有很多獨特之處。
通過網(wǎng)上的一些測試結(jié)果Falcon的性能還是很糟糕的,寫入速度是 MyISAM 的 1/10 ~ 1/20,Select 的優(yōu)化也有問題,添加了索引感覺還會進(jìn)行全表掃描。所以,我終究感覺 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/
#p#
在MySQL經(jīng)歷了2008年Sun的收購和2009年Oracle收購Sun的過程中,基本處于停滯發(fā)展的情況,在可以預(yù)見的未來,MySQL是肯定會被Oracle擱置并且逐步雪藏消滅掉的。MySQL隨著相應(yīng)的各主創(chuàng)和內(nèi)部開發(fā)人員的離去,締造了各個不同的引擎和分支,讓MySQL有希望繼續(xù)發(fā)揚光大起來。
本文大致講解一下MySQL目前除了主要的 MyISAM、InnoDB、Heap(Memory)、NDB 等引擎之外的其他引擎的發(fā)展和現(xiàn)狀,以及MySQL主干以外的分支的狀況,為了我們未來更好的使用MySQL或者其他分支建立一個了解基礎(chǔ)。
要了解主要存儲引擎,請參考手冊:http://dev.mysql.com/doc/refman/5.1/zh/index.html
#p#
Maria存儲引擎
Maria由MySQL的創(chuàng)始人,MyISAM的作者M(jìn)onty (Michael Widenius) 開發(fā),命名為Maria是因為他的第三個小孩就叫Maria。Maria是Monty在MySQL公司的時候就開始開發(fā)的一個MySQL的分支引 擎,Sun收購MySQL后,因為與Sun針對MySQL團隊的一些問題不和,然后在2009年初離開了Sun,成立了 Monty Program Ab 公司,專門用于針對 Maria 引擎的開發(fā),同時開發(fā)了一個MySQL的分支,叫做 MariaDB。
Maria是一個MySQL的存儲引擎,利用它來擴展MyISAM使之在異常退出時文件不至于損壞。Maria的主要目的是作為更好的 MyISAM,提供崩潰后的故障恢復(fù)功能。更長遠(yuǎn)的目標(biāo)是成為一個全功能的事務(wù)型存儲引擎,支持ACID、回滾、多版本并發(fā)控制、行級鎖、成組提交,同時 也可以選擇不支持事務(wù),最終代替MyISAM成為MySQL的默認(rèn)存儲引擎。
目前Maria引擎有針對MySQL 5.1 的版本,基本上就是一個增加了崩潰恢復(fù)功能的MyISAM,使用表級鎖,但可以做到讀寫不沖突,即在進(jìn)行任何類型的更新操作的同時都可以進(jìn)行讀操作,但多個寫操作不能并發(fā)。
Maria的特點:
1. 多版本并發(fā)控制,ACID支持
2. 通過拷貝日志就能進(jìn)行增強備份
3. 高效的磁盤存儲
Maria 引擎開發(fā)之初就是用來取代MyISAM的存儲引擎,并且目前按照我了解有些在使用公司的情況,運行情況挺不錯,大家也可以嘗試一下。Maria 在目前有MySQL創(chuàng)始人帶領(lǐng)的情況下,也是一個非常有前途的的存儲引擎,值得期待。
Maria下載:http://askmonty.org/wiki/MariaDB:Download
Maria手冊:http://askmonty.org/wiki/Maria
[PrimeBase XT (PBXT) 存儲引擎 ]
PBXT 是 PrimeBase 公司推出的MySQL插件引擎,其功能和 InnoDB 類似,它是一款事務(wù)型存儲引擎,并且它的設(shè)計是很獨特的。它的一個很與眾不同的特征就是如何來使用事務(wù)日志和數(shù)據(jù)文件來防止“write-ahead”日 志,這可以極大的減少事務(wù)提交的開銷。這個架構(gòu)給了PBXT很大的提高寫并發(fā)的空間,并且測試也表明它在某些特定的操作下比InnoDB要快。PBXT也 使用了MVCC并且支持外鍵約束,但是它不使用簇索引。
主要特性如下:
MVCC的 :多版本并發(fā)控制,使讀操作沒有鎖定
事務(wù)性 :支持啟動開始,COMMIT和ROLLBACK和恢復(fù)上
ACID標(biāo)準(zhǔn) :原子性,一致性,隔離,持久(一次提交的更改不能丟失)
行級鎖定 :更新使用行級鎖的并發(fā)允許***并發(fā)量
死鎖檢測 :立即通知如果客戶端進(jìn)程已陷入死鎖
參照完整性 :外鍵的支持。
寫一次 :PBXT避免的架構(gòu)雙寫入使用日志。
BLOB的流 :在結(jié)合的 BLOB Streaming engine.。 (http://www.blobstreaming.org/)
按照有人的測試結(jié)果來看,PBXT存儲引擎版本的TPS隨著線程數(shù)的增長,表現(xiàn)比較穩(wěn)定,性能上與innodb差不多,長期來看,它的目標(biāo)也是作為 一個能夠取代InnoDB的存儲引擎。而且目前 MariaDB 這個分支已經(jīng)把 PBXT 作為內(nèi)置的存儲引擎,所以也是可以嘗試使用的一個引擎。
性能測試:http://imysql.cn/2008_07_25_innodb_vs_pbxt
引擎下載:http://www.primebase.org/download/index.php
官方網(wǎng)站:http://www.primebase.org/
#p#
MySQL分支介紹:
MariaDB 數(shù)據(jù)庫: MariaDB 是一個采用 Maria 存儲引擎的 MySQL 分支版本,是由原來 MySQL 的作者 Michael Widenius (Monty) 創(chuàng)辦的Monty Program Ab公司所開發(fā)的免費開源的數(shù)據(jù)庫服務(wù)器。基本上 MariaDB 的歷史跟我上面講的 Maria 存儲引擎歷史一樣。MariaDB的設(shè)計目標(biāo)就是用來取代 MySQL Server。Monty是開源數(shù)據(jù)庫聯(lián)盟(Open Database Alliance)的發(fā)起者,所以 MariaDB 也是開源數(shù)據(jù)庫聯(lián)盟的成員。
MariaDB基于事務(wù)的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB引擎來替換InnoDB,MariaDB的存儲引擎還包括了 PrimeBase XT (PBXT) 和 FederatedX 存儲引擎,MariaDB基于GPL 2.0發(fā)布。
Monty Widenius提供了MySQL的分支MariaDB候選版本。MariaDB 5.1完全兼容MySQL 5.1,這個版本早在2008年11月就發(fā)布了,增加了很多新的功能和若干個新的補丁程序。開發(fā)者稱這個候選版本非常穩(wěn)定?;旧?MySQL,MariaDB 解決了很多問題,例如“pool of threads”功能提供解決多數(shù)據(jù)連接問題。目前 MariaDB 發(fā)布的Release版本是 5.1.44,基本上應(yīng)該是跟 MySQL 5.1 的版本兼容的。
MariaDB 基本上名門之后,加上MySQL創(chuàng)始人Monty的實力和號召力,是作為MySQL一個非常好的替代品,前途發(fā)展無限,值得我們嘗試使用。
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網(wǎng)站:http://askmonty.org
Drizzle 數(shù)據(jù)庫
Drizzle,是從MySQL衍生出來的一個數(shù)據(jù)庫服務(wù)器,一個精簡版的MySQL分支,Drizzle項目的宗旨是構(gòu)建一個“更精練、更輕量、更快 速”的MySQL版本,它的擴展性和易用性與MySQL相當(dāng),但為了提高性能和擴展性,它從原來的核心系統(tǒng)里移除了部分功能。 Drizzle 也是開源數(shù)據(jù)庫聯(lián)盟(Open Database Alliance)成員。
MySql的架構(gòu)設(shè)計總監(jiān)Brian Aker在O’Reilly開放源碼大會(OSCON)上對Drizzle做了介紹。Drizzle是一個能為某些特定類別的應(yīng)用提供支持的數(shù)據(jù)庫項目(“what if” project)。Drizzle的設(shè)計目標(biāo):
1. Web應(yīng)用。
2. 云計算組件。
3. 沒有業(yè)務(wù)邏輯的數(shù)據(jù)庫(又名存儲過程)。
4. 多核架構(gòu)。
Drizzle,一個精簡版的MySQL分支,在目前的MySQL代碼基本之上,將存儲過程、視圖、觸發(fā)器、查詢緩存、PREPARE語句等等沒什 么必要 的功能從代碼中刪掉,簡化對數(shù)據(jù)類型和存儲引擎的支持,并且進(jìn)行大膽的重構(gòu)。最終要實現(xiàn)的目的是將MySQL的代碼大大簡化,理順MySQL的架構(gòu),改善 MySQL的代碼質(zhì)量,提高系統(tǒng)的穩(wěn)定性和性能。將更適合 Web應(yīng)用、云計算組件、沒有業(yè)務(wù)邏輯的數(shù)據(jù)庫(又名存儲過程)、多核架構(gòu) 等業(yè)務(wù)
Drizzle的特征有:
* 基于MySQL 6.0的源碼樹
* 無附加庫
* 遵守POSIX
* 微內(nèi)核設(shè)計
* 可插拔架構(gòu),適用于視圖、存儲過程、UDF、存儲引擎等
* 跨多個節(jié)點的Sharding技術(shù)
* 智能代理
* 多CPU/多核CPU
* 優(yōu)化的字段類型
* 高效的內(nèi)存使用
* 沒有內(nèi)部ACL,使用LDAP/PAM
* 沒有數(shù)據(jù)庫數(shù)據(jù)格式化
* 整理有序的Make系統(tǒng)
* 缺省存儲引擎為InnoDB
* 移除Windows兼容性
#p#
Drizzle 缺省的存儲引擎是InnoDB,支持的數(shù)據(jù)類型更少,基本上設(shè)計目標(biāo)跟 MariaDB 完全不同。MariaDB的設(shè)計目標(biāo)是一個取代MySQL的數(shù)據(jù)庫,而 Drizzle 基本上是一個除了MySQL之外你可以選擇的產(chǎn)品,并且基本上設(shè)計目標(biāo)是針對未來的云計算和分布式Web存儲的方向去的,目前可能不是太穩(wěn)定,不適合在運 營環(huán)境使用,但是相當(dāng)?shù)闹档闷诖?/P>
Drizzle下載:https://launchpad.net/drizzle
Drizzle網(wǎng)站:http://drizzle.org/
總結(jié)語: 基本上來說,目前MySQL還是主流(MyISAM/InnoDB),但是未來發(fā)展不可預(yù)測,并且有這些除了MySQL之外的選擇,也許有一天Oracle把MySQL徹底消滅掉了,但是我們同樣還有 MariaDB、Drizzle可以選擇,這就是開源的力量。
對比幾個MySQL的存儲引擎,Maria 和 XtraDB 是值得大家目前投入逐步使用的行列的,多做一些測試,灰度放亮,獲得一個合理結(jié)果然后再使用是比較合適的。MySQL的數(shù)據(jù)庫分支來說,MariaDB 也是比較值得嘗試使用的,畢竟目前 Drizzle 還不是太成熟穩(wěn)定,并且不一定適合你所做的業(yè)務(wù)。我所了解國內(nèi)部分互聯(lián)網(wǎng)公司也有在使用 MariaDB 的,并且效果不錯,大家也都可以按照自己的情況來使用。
目前NoSQL運動如火如荼,有些業(yè)務(wù)更適合采用Key==>Value或這是BigTable類型的數(shù)據(jù)存儲方式,也許MySQL不是*** 的,當(dāng)然選擇最合適存儲,也許未來大部分?jǐn)?shù)據(jù)庫市場會被NoSQL所占領(lǐng),但是我覺得關(guān)系型數(shù)據(jù)庫還是未來幾年很重要的存儲方式。
在MySQL被Sun收購,已經(jīng)Sun被Oracle收購的過程中,整個開源世界都是在翻天覆地的變化,特別是MySQL的命運一直都是所有使用和 熱愛開源數(shù)據(jù)庫的人們所關(guān)注的,在這些商業(yè)競爭中,那些開源斗士(比如 Monty),都通過別的方式,繼續(xù)發(fā)揚了MySQL這種開源數(shù)據(jù)庫。我們長期來看,總會有一些東西會消失,比如 Falcon存儲引擎,有些東西會繼續(xù)發(fā)展,比如 MariaDB或Drizzle,但是這些都為開源技術(shù)做出了貢獻(xiàn),也為數(shù)據(jù)庫領(lǐng)域增添了色彩。
MySQL數(shù)據(jù)庫存在的存儲引擎和分支問題,相信經(jīng)過MySQL的努力,一定會一一克服。
【編輯推薦】