- 相關(guān)推薦
超越MySQL對(duì)流行數(shù)據(jù)庫(kù)進(jìn)行分支知識(shí)整理
簡(jiǎn) 介
MySQL 是歷史上最受歡迎的免費(fèi)開源程序之一。它是成千上萬(wàn)個(gè)網(wǎng)站的數(shù)據(jù)庫(kù)骨干,并且可以將它(和 Linux)作為過去 10 年里 Internet 呈指數(shù)級(jí)增長(zhǎng)的一個(gè)有力證明。
那么,如果 MySQL 真的這么重要,為什么還會(huì)出現(xiàn)越來(lái)越多的核心 MySQL 產(chǎn)品的高端衍生產(chǎn)品?這是因?yàn)?MySQL 是免費(fèi)的開源應(yīng)用程序,所以開發(fā)人員總是可以獲得其代碼,并按照自己的想法修改代碼,然后再自行分發(fā)代碼。在很長(zhǎng)的一段時(shí)間里,在開發(fā)人員自己的生產(chǎn)環(huán)境 中,沒有任何值得信任的 MySQL 分支。但是,這種情況很快就發(fā)生了改變。有幾個(gè)分支引起了許多人的關(guān)注。
本文將討論受人們關(guān)注的三個(gè)流行 MySQL 分支:Drizzle、MariaDB 和 Percona Server(包括 XtraDB 引擎)。本文將簡(jiǎn)要介紹每個(gè)分支出現(xiàn)的原因及其目標(biāo),以及是否可在您自己的生產(chǎn)環(huán)境中使用它們。在本文結(jié)束時(shí),您應(yīng)該能夠回答 “對(duì)我的環(huán)境來(lái)說,這些 MySQL 分支產(chǎn)品是否是一個(gè)好的解決方案?” 這樣的問題。
為什么要進(jìn)行分支?
為什么需要對(duì) MySQL 進(jìn)行分支?這是一個(gè)非常合理的問題。成千上萬(wàn)的網(wǎng)站依賴于 MySQL,并且對(duì)許多人來(lái)說,它似乎是一個(gè)很好的解決方案。但是,通常就是這樣,適合許多人并不一定適合所有 人。這促使一些開發(fā)人員想要根據(jù)自己的需要開發(fā)出更好的解決方案。還有什么能比將良好的解決方案轉(zhuǎn)換為完美的解決方案更好的呢?。
下面我們將介紹這些分支尋求改變的更多細(xì)節(jié)。一些分支認(rèn)為 MySQL 變得太臃腫 了,提供了許多用戶永遠(yuǎn)不會(huì)感興趣的功能,犧牲了性能的簡(jiǎn)單性。如果人們對(duì)更精簡(jiǎn)的 MySQL 4 特別滿意,那么為什么還要在 MySQL 5 中添加額外的復(fù)雜性呢?對(duì)于此分支來(lái)說,更好的 MySQL 分支應(yīng)該更簡(jiǎn)單、更快捷,因此提供的功能也較少,但這樣會(huì)使這些功能極其迅速地發(fā)揮作用,并且牢記目標(biāo)受眾,在本例中,目標(biāo)受眾是高可用性網(wǎng)站。
對(duì)于其他分支來(lái)說,MySQL 并沒有提供足夠多的 新功能,或者是添加新功能的速度太慢了。他們可能認(rèn)為 MySQL 沒有跟上高可用性網(wǎng)站的目標(biāo)市場(chǎng)的發(fā)展形勢(shì),這些網(wǎng)站運(yùn)行于具有大量?jī)?nèi)存的多核處理器之上。正如熟悉 MySQL 的人所知道的那樣,MySQL 提供了兩種存儲(chǔ)引擎:MyISAM 和 InnoDB。這一分支認(rèn)為這兩種存儲(chǔ)引擎都沒有提供他們所需的內(nèi)容,因此他們創(chuàng)建了一種非常適合其目標(biāo)的新存儲(chǔ)引擎。
此外,一些分支的最高目標(biāo)是成為 MySQL 的替代產(chǎn)品,在這些產(chǎn)品中,您可以輕松地訪問它們的分支,無(wú)需更改任何代碼。該分支使用與 MySQL 相同的代碼和界面,因此使過渡變得非常容易。但是,另一個(gè)分支聲稱它與 MySQL 不兼容,需要更改代碼。每個(gè)分支的成熟度各不相同,一些分支聲稱已經(jīng)準(zhǔn)備就緒可以投入生產(chǎn),而另外一些則聲稱目前自己還遠(yuǎn)達(dá)不到這一最高目標(biāo)。
最后,關(guān)于 MySQL 在 Oracle 下將如何發(fā)展仍不太確定。Oracle 收購(gòu)了 Sun,也收購(gòu)了 MySQL,現(xiàn)在 Oracle 控制 MySQL 產(chǎn)品本身,并領(lǐng)導(dǎo)開發(fā)社區(qū)開發(fā)新的成品。由于 Oracle 已經(jīng)有了一個(gè)商業(yè)數(shù)據(jù)庫(kù),因此人們擔(dān)心他們可能沒有足夠的資源來(lái)使 MySQL 保持其領(lǐng)先地位。因此,許多分支也是這些潛在擔(dān)心所產(chǎn)生的結(jié)果,他們擔(dān)心 MySQL 作為領(lǐng)先的免費(fèi)開源數(shù)據(jù)庫(kù)提供的功能可能太少、發(fā)布周期太慢并且支持費(fèi)用更昂貴。
XtraDB
XtraDB 是一款獨(dú)立的產(chǎn)品,但它仍被認(rèn)為是 MySQL 的一個(gè)分支。XtraDB 實(shí)際上是基于 MySQL 的數(shù)據(jù)庫(kù)的一個(gè)存儲(chǔ)引擎。XtraDB 被認(rèn)為是已成為 MySQL 一部分的標(biāo)準(zhǔn) MyISAM 和 InnoDB 的一個(gè)額外存儲(chǔ)引擎。MySQL 4 和 5 使用默認(rèn)的 MyISAM 存儲(chǔ)引擎安裝每個(gè)表。InnoDB 也是一個(gè)相對(duì)較新的存儲(chǔ)引擎選擇,在建立數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)管理員和開發(fā)人員可以基于每個(gè)表選擇存儲(chǔ)引擎類型。兩個(gè)存儲(chǔ)引擎的主要區(qū)別是:MyISAM 沒有提供事務(wù)支持,而 InnoDB 提供了事務(wù)支持。其他差別是許多細(xì)微的性能差別,與 MyISAM 相比,InnoDB 提供了許多細(xì)微的性能改進(jìn),并且在處理潛在的數(shù)據(jù)丟失時(shí)提供了更高的可靠性和安全性。似乎 InnoDB 是用于未來(lái)改進(jìn)的更適合的存儲(chǔ)引擎,因此從版本 5.5 開始,MySQL 已將默認(rèn)存儲(chǔ)引擎從 MyISAM 更改為 InnoDB。
基于這些優(yōu)勢(shì),InnoDB 存儲(chǔ)引擎本身拆分出了一個(gè)分支,一個(gè)名為 XtraDB 的更新的存儲(chǔ)引擎。這個(gè)存儲(chǔ)引擎有多新呢?它 3 年前由 Percona 首次發(fā)布,因此它相對(duì)較新。它是專門針對(duì)在現(xiàn)代服務(wù)器上運(yùn)行的現(xiàn)代高可用性網(wǎng)站設(shè)計(jì)的。它被設(shè)計(jì)為在具有十幾個(gè)或更多核心和大內(nèi)存(32 GB及更多)的服務(wù)器上運(yùn)行。任何公司都可以從服務(wù)器管理公司購(gòu)買這些類型的服務(wù)器,因此應(yīng)將數(shù)據(jù)庫(kù)設(shè)計(jì)為能夠充分利用這些服務(wù)器。
XtraDB 分支有另一個(gè)目標(biāo),即成為 InnoDB 存儲(chǔ)引擎的簡(jiǎn)單替代,這樣用戶就可以輕松地切換其存儲(chǔ)引擎,無(wú)需 更改任何現(xiàn)有的應(yīng)用程序代碼。XtraDB 必須能夠向后兼容 InnoDB,以提供它們想要添加的所有新功能和改進(jìn)。它們實(shí)現(xiàn)了此目標(biāo)。
XtraDB 的速度有多快?我找到的一個(gè)性能測(cè)試表明:與內(nèi)置的 MySQL 5.1 InnoDB 引擎相比,它每分鐘可處理 2.7 倍的事務(wù)。。速度顯然是一個(gè)不可以忽略的因素,在考慮替代產(chǎn)品時(shí)更是如此。
Percona
與內(nèi)置的 MySQL 存儲(chǔ)引擎相比,XtraDB 提供了一些極大的改進(jìn),但它不是一款獨(dú)立產(chǎn)品,也無(wú)法輕松放入現(xiàn)有 MySQL 安裝。因此,如果您想使用這款新引擎,則必須使用提供它的產(chǎn)品。
Percona Server 就是這樣一款產(chǎn)品,由領(lǐng)先的 MySQL 咨詢公司 Percona 發(fā)布。Percona Server 是一款獨(dú)立的數(shù)據(jù)庫(kù)產(chǎn)品,為用戶提供了換出其 MySQL 安裝并換入 Percona Server 產(chǎn)品的能力。通過這樣做,就可以利用 XtraDB 存儲(chǔ)引擎。Percona Server 聲稱可以完全與 MySQL 兼容,因此從理論上講,您無(wú)需更改軟件中的任何代碼。這確實(shí)是一個(gè)很大的優(yōu)勢(shì),適合在您尋找快速性能改進(jìn)時(shí)控制質(zhì)量。因此,采用 Percona Server 的一個(gè)很好的理由是,利用 XtraDB 引擎來(lái)盡可能地減少代碼更改。
此外,他們是 XtraDB 存儲(chǔ)引擎的原作者。Percona 將此代碼用作開源代碼,因此您可以在其他產(chǎn)品中找到它,但引擎的最初創(chuàng)建者與編寫此產(chǎn)品的是同一個(gè)人,所以您可以隨心所欲地使用此信息。
下面是 Percona Server 的聲明,該聲明來(lái)自它們自己的網(wǎng)站:
可擴(kuò)展性:處理更多事務(wù);在強(qiáng)大的服務(wù)器上進(jìn)行擴(kuò)展
性能:使用了 XtraDB 的 Percona Server 速度非常快
可靠性:避免損壞,提供崩潰安全 (crash-safe) 復(fù)制
管理:在線備份,在線表格導(dǎo)入/導(dǎo)出
診斷:高級(jí)分析和檢測(cè)
靈活性:可變的頁(yè)面大小,改進(jìn)的緩沖池管理Percona 團(tuán)隊(duì)的最終聲明是 “Percona Server 是由 Oracle 發(fā)布的最接近官方 MySQL Enterprise 發(fā)行版的版本”,因此與其他更改了大量基本核心 MySQL 代碼的分支有所區(qū)別。Percona Server 的一個(gè)缺點(diǎn)是他們自己管理代碼,不接受外部開發(fā)人員的貢獻(xiàn),以這種方式確保他們對(duì)產(chǎn)品中所包含功能的控制。
MariaDB
另一款提供了 XtraDB 存儲(chǔ)引擎的產(chǎn)品是 MariaDB 產(chǎn)品。它與 Percona 產(chǎn)品非常類似,但是提供了更多底層代碼更改,試圖提供比標(biāo)準(zhǔn) MySQL 更多的性能改進(jìn)。MariaDB 直接利用來(lái)自 Percona 的 XtraDB 引擎,由于它們使用的是完全相同的引擎,因此每次使用存儲(chǔ)引擎時(shí)沒有顯著的差別。
此外,MariaDB 提供了 MySQL 提供的標(biāo)準(zhǔn)存儲(chǔ)引擎,即 MyISAM 和 InnoDB。因此,實(shí)際上,可以將它視為 MySQL 的擴(kuò)展集,它不僅提供 MySQL 提供的所有功能,還提供其他功能。MariaDB 還聲稱自己是 MySQL 的替代,因此從 MySQL 切換到 MariaDB 時(shí),無(wú)需更改任何基本代碼即可安裝它。
最后可能也是最重要的一點(diǎn)是,MariaDB 的主要?jiǎng)?chuàng)建者是 Monty Widenius,也是 MySQL 的初始創(chuàng)建者。Monty 成立了一家名為 Monty Program 的公司來(lái)管理 MariaDB 的開發(fā),這家公司雇傭開發(fā)人員來(lái)編寫和改進(jìn) MariaDB 產(chǎn)品。這既是一件好事,也是一件壞事:有利的一面在于他們是 Maria 功能和 bug 修復(fù)的佼佼者,但公司不是以贏利為目的,而是由產(chǎn)品驅(qū)動(dòng)的,這可能會(huì)帶來(lái)問題,因?yàn)闆]有贏利的公司不一定能長(zhǎng)久維持下去。
Drizzle
本文介紹的最后一款產(chǎn)品是 Drizzle。與之前介紹的兩款產(chǎn)品不同,Drizzle 與 MySQL 有很大差別,甚至聲稱它們不是 MySQL 的替代產(chǎn)品。他們期望對(duì) MySQL 進(jìn)行一些重大更改,想要提供一種出色的解決方案來(lái)解決高可用性問題,即使這意味著要更改我們已經(jīng)習(xí)慣了的 MySQL 的各個(gè)方面。
在公司的 FAQ 頁(yè)面,閱讀其中提供的問題時(shí)就會(huì)發(fā)現(xiàn),Drizzle 進(jìn)一步地強(qiáng)調(diào)了其基本目標(biāo)。他們不滿意 MySQL 4.1 版本之后對(duì) MySQL 代碼進(jìn)行的一些更改,聲稱許多開發(fā)人員不想花費(fèi)額外的錢。他們承認(rèn)其產(chǎn)品與 SQL 關(guān)系數(shù)據(jù)庫(kù)甚至是不兼容的。這確實(shí)與 MySQL 有很大的不同。
與習(xí)慣的 MySQL 有如此大的變化,我們?yōu)槭裁催要考慮這款產(chǎn)品呢?準(zhǔn)確地講,原因與上面的是相同的,Drizzle 是 MySQL 引擎的一次重大修改,它清除了一些表現(xiàn)不佳和不必要的功能,將很多代碼重寫,對(duì)它們進(jìn)行了優(yōu)化,甚至將所用語(yǔ)言從 C 換成了 C++,以獲得所需的代碼。此外,Drizzle 并沒有就此結(jié)束修改,該產(chǎn)品在設(shè)計(jì)時(shí)就考慮到了其目標(biāo)市場(chǎng),即具有大量?jī)?nèi)容的多核服務(wù)器、運(yùn)行 Linux 的 64 位機(jī)器、云計(jì)算中使用的服務(wù)器、托管網(wǎng)站的服務(wù)器和每分鐘接收數(shù)以萬(wàn)計(jì)點(diǎn)擊率的服務(wù)器。這是一個(gè)相當(dāng)具體的市場(chǎng)。它太具體了嗎?請(qǐng)記住這些類型的公司目前 在其數(shù)據(jù)庫(kù)方面投入的資金,如果他們可以安裝 Drizzle 而不是 MySQL,那么他們的服務(wù)器成本將削減一半,可以節(jié)省很多錢!
那么,是不是所有人都應(yīng)該使用 Drizzle 呢?等等,正如 Drizzle 反復(fù)指出的那樣,它與 MySQL 不兼容。因此,如果您現(xiàn)在使用的是 MySQL 平臺(tái),那么需要重寫大量代碼,才能使 Drizzle 在您的環(huán)境中正常工作。
盡管需要額外的工作才能讓它運(yùn)行,但它并不像 Percona 或 MariaDB 那樣快速且易于使用。我之所以介紹 Drizzle,是因?yàn)楸M管目前它可能不是您的選擇,但幾年之后,它很可能會(huì)成為一些人的選擇。因?yàn)楸疚牡哪繕?biāo)是提高您對(duì)未來(lái)使用的工具的認(rèn)識(shí),所以這是 向您介紹此產(chǎn)品的好機(jī)會(huì)。許多領(lǐng)先的 DB 專家相信 Drizzle 將成為未來(lái) 5 年內(nèi)高可用性數(shù)據(jù)庫(kù)安裝的選擇。
Drizzle 是完全開源的產(chǎn)品,公開接受開發(fā)人員的貢獻(xiàn)。它不像 MariaDB 那樣有支持其開發(fā)的公司,也不像 Percona 那樣有大量外部開發(fā)人員為其提供貢獻(xiàn)。Drizzle 有很好的成長(zhǎng)空間并會(huì)提供一些新功能,但可能需要重寫大部分 MySQL 代碼。
對(duì)比圖
下面是本文中介紹的三款 MySQL 分支產(chǎn)品的概述。
產(chǎn)品價(jià)格目標(biāo)主要功能是否可投入生產(chǎn)?Percona Server免費(fèi)提供 XtraDB 存儲(chǔ)引擎的包裝器和其他分析工具XtraDB是MariaDB免費(fèi)擴(kuò)展 MySQL 以包含 XtraDB 和其他性能改進(jìn)XtraDB是Drizzle免費(fèi)提供比 MySQL 更強(qiáng)大的可擴(kuò)展性和性能改進(jìn)高可用性是
結(jié)束語(yǔ)
本文介紹了 MySQL 產(chǎn)品的三個(gè)新分支,旨在解決它們使用 MySQL 時(shí)遇到的一些問題。這三個(gè)分支都是免費(fèi)的開源產(chǎn)品。在使用時(shí),您需要根據(jù) MySQL 已提供的功能來(lái)權(quán)衡它們的優(yōu)缺點(diǎn)。我相信,對(duì)于閱讀本文的大多數(shù)人來(lái)說,MySQL 將仍然 是滿足數(shù)據(jù)庫(kù)需求的首選。我很懷疑閱讀本文的大多數(shù)讀者都是每小時(shí)擁有 1,000,000 點(diǎn)擊率的網(wǎng)站的所有者。我想再次強(qiáng)調(diào)的是,MySQL 仍然是一款非常出色的產(chǎn)品,是一個(gè)非常適合大多數(shù)使用情況的數(shù)據(jù)庫(kù)。
但是,對(duì)于那些認(rèn)為自己的網(wǎng)站需要比目前 MySQL 所能提供的更高的可用性、可擴(kuò)展性和性能的人來(lái)說,這 3 款產(chǎn)品中的任意一款產(chǎn)品都可能為您提供所需的解決方案。更進(jìn)一步地說,如果您認(rèn)為您的網(wǎng)站將成為 能獲得很多利潤(rùn)的網(wǎng)站,那么可以考慮使用三款產(chǎn)品中的一款產(chǎn)品,在問題出現(xiàn)之前解決它們。
最后,出現(xiàn)這些 MySQL 分支的根本原因是:一些創(chuàng)作者想更改 MySQL 的一些基本功能,因?yàn)樗麄儫o(wú)法等到 MySQL 自己完成這些工作。此外,Oracle 的現(xiàn)狀威脅到了 MySQL 的未來(lái),并且許多開發(fā)人員(包括 MySQL 的原始開發(fā)人員)都擔(dān)心該產(chǎn)品的未來(lái),他們還擔(dān)心 Oracle 是否會(huì)投入精力保持該產(chǎn)品的領(lǐng)先數(shù)據(jù)庫(kù)的地位。這些擔(dān)憂在我看來(lái)都是合理的,因此在我們邁向未來(lái)時(shí)要牢記這些產(chǎn)品。
【超越MySQL對(duì)流行數(shù)據(jù)庫(kù)進(jìn)行分支知識(shí)整理】相關(guān)文章:
如何實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的備份與恢復(fù)電腦知識(shí)06-28
MySQL數(shù)據(jù)庫(kù)如何備份與恢復(fù)06-28
如何實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的備份與恢復(fù)06-28
MySQL數(shù)據(jù)庫(kù)備份守則和方法04-22
用MySQL來(lái)創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)表06-28
MySQL數(shù)據(jù)庫(kù)所支持的操作系統(tǒng)介紹06-28
如何用crontab系統(tǒng)每天定時(shí)備份MySQL數(shù)據(jù)庫(kù)06-28
計(jì)算機(jī)二級(jí)mysql數(shù)據(jù)庫(kù)模擬試題07-01
如何在命令行CMD模式下備份MySQL數(shù)據(jù)庫(kù)06-28
PHP+mysql的網(wǎng)站作品在面試的時(shí)候如何帶去?導(dǎo)出數(shù)據(jù)庫(kù)?07-13