天天看點

超越MySQL:三個流行MySQL分支的對比

簡介

MySQL是曆史上最受歡迎的免費開源程式之一。它是成千上萬個網站的資料庫骨幹,并且可以将它(和Linux)作為過去10年裡Internet呈指數級增長的一個有力證明。

那麼,如果MySQL真的這麼重要,為什麼還會出現越來越多的核心MySQ産品的高端衍生産品?這是因為MySQL是免費的開源應用程式,是以開發人員總是可以獲得其代碼,并按照自己的想法修改代碼,然後再自行分發代碼。在很長的一段時間裡,在開發人員自己的生産環境中,沒有任何值得信任的MySQL分支。但是,這種情況很快就發生了改變。有幾個分支引起了許多人的關注。

為什麼要進行分支?

為什麼需要對MySQL進行分支?這是一個非常合理的問題。成千上萬的網站依賴于MySQL,并且對許多人來說,它似乎是一個很好的解決方案。但是,通常就是這樣,适合許多人并不一定适合所有人。這促使一些開發人員想要根據自己的需要開發出更好的解決方案。還有什麼能比将良好的解決方案轉換為完美的解決方案更好的呢?。

下面我們将介紹這些分支尋求改變的更多細節。一些分支認為MySQL變得太臃腫了,提供了許多使用者永遠不會感興趣的功能,犧牲了性能的簡單性。如果人們對更精簡的MySQL 4特别滿意,那麼為什麼還要在MySQL 5中添加額外的複雜性呢?對于此分支來說,更好的MySQL分支應該更簡單、更快捷,是以提供的功能也較少,但這樣會使這些功能極其迅速地發揮作用,并且牢記目标閱聽人,在本例中,目标閱聽人是高可用性網站。

對于其他分支來說,MySQL并沒有提供足夠多的新功能,或者是添加新功能的速度太慢了。他們可能認為MySQL沒有跟上高可用性網站的目标市場的發展形勢,這些網站運作于具有大量記憶體的多核處理器之上。正如熟悉MySQL的人所知道的那樣,MySQL提供了兩種存儲引擎:MyISAM和InnoDB。這一分支認為這兩種存儲引擎都沒有提供他們所需的内容,是以他們建立了一種非常适合其目标的新存儲引擎。

此外,一些分支的最高目标是成為MySQL的替代産品,在這些産品中,您可以輕松地通路它們的分支,無需更改任何代碼。該分支使用與MySQL相同的代碼和界面,是以使過渡變得非常容易。但是,另一個分支聲稱它與MySQL不相容,需要更改代碼。每個分支的成熟度各不相同,一些分支聲稱已經準備就緒可以投入生産,而另外一些則聲稱目前自己還遠達不到這一最高目标。

最後,關于MySQL在Oracle下将如何發展仍不太确定。Oracle收購了Sun,也收購了MySQL,現在Oracle控制MySQL産品本身,并上司開發社群開發新的成品。由于Oracle已經有了一個商業資料庫,是以人們擔心他們可能沒有足夠的資源來使MySQL保持其領先地位。是以,許多分支也是這些潛在擔心所産生的結果,他們擔心MySQL作為領先的免費開源資料庫提供的功能可能太少、釋出周期太慢并且支援費用更昂貴。

XtraDB

XtraDB是一款獨立的産品,但它仍被認為是MySQL的一個分支。XtraDB實際上是基于MySQL的資料庫的一個存儲引擎。XtraDB被認為是已成為MySQL一部分的标準MyISAM和InnoDB的一個額外存儲引擎。MySQL 4和5使用預設的MyISAM存儲引擎安裝每個表。InnoDB也是一個相對較新的存儲引擎選擇,在建立資料庫時,資料庫管理者和開發人員可以基于每個表選擇存儲引擎類型。兩個存儲引擎的主要差別是:MyISAM沒有提供事務支援,而InnoDB提供了事務支援。其他差别是許多細微的性能差别,與MyISAM相比,InnoDB提供了許多細微的性能改進,并且在處理潛在的資料丢失時提供了更高的可靠性和安全性。似乎InnoDB是用于未來改進的更适合的存儲引擎,是以從版本5.5開始,MySQL已将預設存儲引擎從MyISAM更改為InnoDB。

基于這些優勢,InnoDB存儲引擎本身拆分出了一個分支,一個名為XtraDB的更新的存儲引擎。這個存儲引擎有多新呢?它3年前由Percona首次釋出,是以它相對較新。它是專門針對在現代伺服器上運作的現代高可用性網站設計的。它被設計為在具有十幾個或更多核心和大記憶體(32GB及更多)的伺服器上運作。任何公司都可以從伺服器管理公司購買這些類型的伺服器,是以應将資料庫設計為能夠充分利用這些伺服器。

XtraDB分支有另一個目标,即成為InnoDB存儲引擎的簡單替代,這樣使用者就可以輕松地切換其存儲引擎,無需更改任何現有的應用程式代碼。XtraDB必須能夠向後相容InnoDB,以提供它們想要添加的所有新功能和改進。它們實作了此目标。

XtraDB的速度有多快?我找到的一個性能測試表明:與内置的MySQL 5.1 InnoDB 引擎相比,它每分鐘可處理2.7倍的事務。(請參見參考資料)。速度顯然是一個不可以忽略的因素,在考慮替代産品時更是如此。

Percona

與内置的MySQL存儲引擎相比,XtraDB提供了一些極大的改進,但它不是一款獨立産品,也無法輕松放入現有MySQL安裝。是以,如果您想使用這款新引擎,則必須使用提供它的産品。

Percona Server就是這樣一款産品,由領先的MySQL咨詢公司Percona釋出。Percona Server是一款獨立的資料庫産品,為使用者提供了換出其MySQL安裝并換入Percona Server産品的能力。通過這樣做,就可以利用XtraDB存儲引擎。Percona Server聲稱可以完全與MySQL相容,是以從理論上講,您無需更改軟體中的任何代碼。這确實是一個很大的優勢,适合在您尋找快速性能改進時控制品質。是以,采用Percona Server的一個很好的理由是,利用XtraDB引擎來盡可能地減少代碼更改。

此外,他們是XtraDB存儲引擎的原作者。Percona将此代碼用作開源代碼,是以您可以在其他産品中找到它,但引擎的最初建立者與編寫此産品的是同一個人,是以您可以随心所欲地使用此資訊。

下面是Percona Server的聲明,該聲明來自它們自己的網站:

可擴充性:處理更多事務;在強大的伺服器上進行擴充

性能:使用了XtraDB的Percona Server速度非常快

可靠性:避免損壞,提供崩潰安全(crash-safe)複制

管理:線上備份,線上表格導入/導出

診斷:進階分析和檢測

靈活性:可變的頁面大小,改進的緩沖池管理

Percona團隊的最終聲明是“Percona Server是由Oracle釋出的最接近官方MySQL Enterprise發行版的版本”,是以與其他更改了大量基本核心MySQL代碼的分支有所差別。Percona Server的一個缺點是他們自己管理代碼,不接受外部開發人員的貢獻,以這種方式確定他們對産品中所包含功能的控制。

MariaDB

另一款提供了XtraDB存儲引擎的産品是MariaDB産品。它與Percona産品非常類似,但是提供了更多底層代碼更改,試圖提供比标準MySQL更多的性能改進。MariaDB直接利用來自Percona的XtraDB引擎,由于它們使用的是完全相同的引擎,是以每次使用存儲引擎時沒有顯著的差别。

此外,MariaDB提供了MySQL提供的标準存儲引擎,即MyISAM和InnoDB。是以,實際上,可以将它視為MySQL的擴充集,它不僅提供MySQL提供的所有功能,還提供其他功能。MariaDB還聲稱自己是MySQL的替代,是以從MySQL切換到MariaDB時,無需更改任何基本代碼即可安裝它。

最後可能也是最重要的一點是,MariaDB的主要建立者是Monty Widenius,也是MySQL的初始建立者。Monty成立了一家名為Monty Program的公司來管理MariaDB的開發,這家公司雇傭開發人員來編寫和改進MariaDB産品。這既是一件好事,也是一件壞事:有利的一面在于他們是Maria功能和bug修複的佼佼者,但公司不是以赢利為目的,而是由産品驅動的,這可能會帶來問題,因為沒有赢利的公司不一定能長久維持下去。

Drizzle

本文介紹的最後一款産品是Drizzle。與之前介紹的兩款産品不同,Drizzle與MySQL有很大差别,甚至聲稱它們不是MySQL的替代産品。他們期望對MySQL進行一些重大更改,想要提供一種出色的解決方案來解決高可用性問題,即使這意味着要更改我們已經習慣了的MySQL的各個方面。

在公司的FAQ頁面,閱讀其中提供的問題時就會發現,Drizzle進一步地強調了其基本目标。他們不滿意MySQL 4.1版本之後對MySQL代碼進行的一些更改,聲稱許多開發人員不想花費額外的錢。他們承認其産品與SQL關系資料庫甚至是不相容的。這确實與MySQL有很大的不同。

與習慣的MySQL有如此大的變化,我們為什麼還要考慮這款産品呢?準确地講,原因與上面的是相同的,Drizzle是MySQL引擎的一次重大修改,它清除了一些表現不佳和不必要的功能,将很多代碼重寫,對它們進行了優化,甚至将所用語言從C換成了C++,以獲得所需的代碼。此外,Drizzle并沒有就此結束修改,該産品在設計時就考慮到了其目标市場,即具有大量内容的多核伺服器、運作Linux的64位機器、雲計算中使用的伺服器、托管網站的伺服器和每分鐘接收數以萬計點選率的伺服器。這是一個相當具體的市場。它太具體了嗎?請記住這些類型的公司目前在其資料庫方面投入的資金,如果他們可以安裝Drizzle而不是MySQL,那麼他們的伺服器成本将削減一半,可以節省很多錢!

那麼,是不是所有人都應該使用Drizzle呢?等等,正如Drizzle反複指出的那樣,它與MySQL不相容。是以,如果您現在使用的是MySQL平台,那麼需要重寫大量代碼,才能使Drizzle在您的環境中正常工作。

盡管需要額外的工作才能讓它運作,但它并不像Percona或MariaDB那樣快速且易于使用。我之是以介紹Drizzle,是因為盡管目前它可能不是您的選擇,但幾年之後,它很可能會成為一些人的選擇。因為本文的目标是提高您對未來使用的工具的認識,是以這是向您介紹此産品的好機會。許多領先的DB專家相信Drizzle将成為未來5年内高可用性資料庫安裝的選擇。

Drizzle是完全開源的産品,公開接受開發人員的貢獻。它不像MariaDB那樣有支援其開發的公司,也不像Percona那樣有大量外部開發人員為其提供貢獻。Drizzle有很好的成長空間并會提供一些新功能,但可能需要重寫大部分MySQL代碼。

對比圖

下面是本文中介紹的三款MySQL分支産品的概述。

結束語

本文介紹了MySQL産品的三個新分支,旨在解決它們使用MySQL時遇到的一些問題。這三個分支都是免費的開源産品。在使用時,您需要根據MySQL已提供的功能來權衡它們的優缺點。我相信,對于閱讀本文的大多數人來說,MySQL将仍然是滿足資料庫需求的首選。我很懷疑閱讀本文的大多數讀者都是每小時擁有1,000,000點選率的網站的所有者。我想再次強調的是,MySQL仍然是一款非常出色的産品,是一個非常适合大多數使用情況的資料庫。

但是,對于那些認為自己的網站需要比目前MySQL所能提供的更高的可用性、可擴充性和性能的人來說,這3款産品中的任意一款産品都可能為您提供所需的解決方案。更進一步地說,如果您認為您的網站将成為能獲得很多利潤的網站,那麼可以考慮使用三款産品中的一款産品,在問題出現之前解決它們。

最後,出現這些MySQL分支的根本原因是:一些創作者想更改MySQL的一些基本功能,因為他們無法等到MySQL自己完成這些工作。此外,Oracle的現狀威脅到了MySQL的未來,并且許多開發人員(包括MySQL的原始開發人員)都擔心該産品的未來,他們還擔心Oracle是否會投入精力保持該産品的領先資料庫的地位。這些擔憂在我看來都是合理的,是以在我們邁向未來時要牢記這些産品。

作者簡介:

Michael Abernethy在Michael Abernethy的12年技術生涯中,他與各種不同的技術和客戶打交道。他現在專注于建構更好和更為複雜的Web應用程式、測試運作這些應用程式所在的浏覽器的限制,同時也在嘗試解決如何讓Web應用程式更容易建立和維護。他空閑時,會陪伴他的孩子們。

本文轉自ljianbing51CTO部落格,原文連結:http://blog.51cto.com/ljianbing/1622494 ,如需轉載請自行聯系原作者