程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL數據庫存儲引擎和分支現狀分析

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

編輯:關於MYSQL數據庫
MySQL隨著相應的各主創和內部開發人員的離去,締造了各個不同的引擎和分支,讓MySQL有希望繼續發揚光大起來。 

在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引擎有針對MySQL 5.1 的版本,基本上就是一個增加了崩潰恢復功能的MyISAM,使用表級鎖,但可以做到讀寫不沖突,即在進行任何類型的更新操作的同時都可以進行讀操作,但多個寫操作不能並發。

Maria的特點:

◆多版本並發控制,ACID支持

◆通過拷貝日志就能進行增強備份

◆高效的磁盤存儲

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基於GPL 2.0發布。

Monty Widenius提供了MySQL的分支MariaDB候選版本。MariaDB 5.1完全兼容MySQL 5.1,這個版本早在2008年11月就發布了,增加了很多新的功能和若干個新的補丁程序。開發者稱這個候選版本非常穩定。基本上 MySQL,MariaDB 解決了很多問題,例如“pool of threads”功能提供解決多數據連接問題。目前 MariaDB 發布的Release版本是 5.1.44,基本上應該是跟 MySQL 5.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的特征有:

1. 基於MySQL 6.0的源碼樹

2. 無附加庫

3. 遵守POSIX

4. 微內核設計

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

6. 跨多個節點的Sharding技術

7. 智能代理

8. 多CPU/多核CPU

9. 優化的字段類型

10. 高效的內存使用

11. 沒有內部ACL,使用LDAP/PAM

12. 沒有數據庫數據格式化

13. 整理有序的Make系統

14. 缺省存儲引擎為InnoDB

15. 移除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,但是這些都為開源技術做出了貢獻,也為數據庫領域增添了色彩。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved