MySQL作為一個(gè)開源數(shù)據(jù)庫(kù),自從被Oracle接管后,其發(fā)展前景就一直受到開發(fā)社區(qū)的關(guān)注,其中也有質(zhì)疑,最近,兩位開發(fā)者分別發(fā)表了選擇和放棄MySQL的理由,值得數(shù)據(jù)庫(kù)相關(guān)人員參考。
Andy Patrizio列舉了選擇MySQL的五個(gè)理由,包括:
- MySQL并不像其他關(guān)系型數(shù)據(jù)庫(kù)那樣成熟。MySQL剛起步時(shí)并不是一個(gè)RDBMS,但是后來改變了發(fā)展方向,增加了更多的功能。在許多人眼里,其他成熟、歷史久的關(guān)系型數(shù)據(jù)庫(kù)依然比MySQL功能更加豐富。如果你想要一個(gè)功能豐富的RDBMS,那么可能會(huì)選擇PostgreSQL 或者其他商業(yè)產(chǎn)品,比如Oracle或者微軟SQL Server。PostgreSQL代碼貢獻(xiàn)者Selena Deckelmann表示Postgres對(duì)于需要關(guān)系型數(shù)據(jù)庫(kù)的Web開發(fā)者來說是一個(gè)正確的選擇,隨著對(duì)JSON數(shù)據(jù)結(jié)構(gòu)和PLV8的支持,Postgres會(huì)成為NoSQL的默認(rèn)選擇。
- MySQL雖然是開源的,但只是形似。從技術(shù)上說,MySQL是一個(gè)開源數(shù)據(jù)庫(kù),但是實(shí)際上,開發(fā)者已經(jīng)感覺異樣。在Oracle的管理下,MySQL現(xiàn)在有一些專利保護(hù)和私有模塊。Paula Rooney表示,MySQL的活躍只停留在表面,Oracle控制著開發(fā)進(jìn)程,并且拒絕發(fā)布測(cè)試用例,安全補(bǔ)丁也受到嚴(yán)格控制。Oracle是不是應(yīng)該把MySQL奉獻(xiàn)給Apache?其實(shí)你有其他開源替代品,比如MySQL的一個(gè)分支MariaDB一致是真正的開源。MariaDB的所有代碼都是在在GPL、LPGL或BSD協(xié)議下發(fā)布的,不存在類似MySQL 5.5企業(yè)版那樣的私有模塊。
- MySQL的性能表現(xiàn)沒有其他競(jìng)爭(zhēng)者好。MariaDB博客提供了MySQL和MariaDB基準(zhǔn)測(cè)試的結(jié)果,后者勝出。PostgreSQL開發(fā)者表示Heroku Postgres更有吸引力,“它們是Postgres最大的托管環(huán)境,自動(dòng)處理應(yīng)用的擴(kuò)展,支持插件……”
- MySQL由Oracle掌控,而不是社區(qū)驅(qū)動(dòng)。MySQL自從被Oracle接管折后,雖然沒有明顯改變過方向,但是Oracle的存在還是讓開發(fā)者感到緊張。MySQL和MariaDB地創(chuàng)始人Michael “Monty” Widenius表示,最糟糕的是,社區(qū)不可能與Oracle的開發(fā)人員一起參與MySQL。而且,Oracle拒絕接受補(bǔ)丁,也不愿意公布路線圖。
- 放棄MySQL的人越來越多。就那今年來說,Redhat、Slackware Linux、OpenSUSE、Wikipedia都先后宣布放棄MySQL,采用MariaDB。Wikimedia架構(gòu)師Asher Feldman解釋說,MariaDB的優(yōu)化程序增強(qiáng)功能和Percona的XtraDB功能設(shè)置是作出改變的根本原因。“我們歡迎并支持MariaDB Foundation成為一個(gè)非盈利組織。”
而Rikki Endsley則列出了放棄MySQL的五個(gè)理由:
- MySQL的投入和創(chuàng)新超過以往。自收購(gòu)以來,Oracle已經(jīng)增加了MySQL的開發(fā)人員,并提供了更加成熟的工程模式,不再像以前典型的開源項(xiàng)目一樣,開發(fā)人員散落在世界各地。同時(shí),MySQL的代碼更加模塊化,這意味著短期的投入會(huì)獲得長(zhǎng)期的回報(bào)。在MySQL 5.6中,他們分解了MySQL服務(wù)器的關(guān)鍵鎖——LOCK_open,性能改進(jìn)了一倍多。此外,MySQL的存儲(chǔ)引擎是InnoDB,Oracle在2005年收購(gòu)了InnoDB。因此,兩者可以更好的結(jié)合。
- MyDQL產(chǎn)品依然健壯。MariaDB和其他開源產(chǎn)品抱怨MySQL 5.5沒有測(cè)試用例和某些企業(yè)功能是私有模塊,但是它依然表現(xiàn)突出,Oracle花費(fèi)了兩年發(fā)布DMR給MySQL社區(qū)來測(cè)試和得到反饋。MySQL 5.6從之前的4 CPU線程增長(zhǎng)到64 CPU線程,還有其他新功能。
- MySQL關(guān)注Web、Cloud和Big Data。為了支持云服務(wù),MySQL的備份做了極大地改進(jìn),比如Global Transaction Identifiers (GTIDs). GTIDs可以輕松地跟蹤和比較master和slave服務(wù)器之間的進(jìn)度狀態(tài)。在2013年4月,Oracle發(fā)布了針對(duì)Hadoop的MySQL Applier。Nokia首先將MySQL應(yīng)用于大數(shù)據(jù)環(huán)境中,包括集中的Hadoop集群等等。
- MySQL企業(yè)版5.6增加了高可用性功能,比如備份等,還有企業(yè)版監(jiān)控器,可以持續(xù)的幫你監(jiān)控?cái)?shù)據(jù)庫(kù)并提供最佳實(shí)踐。還有Query Analyzer來監(jiān)控應(yīng)用的性能,同時(shí)還有豐富的管理工具用于服務(wù)器配置和用戶管理。
- MySQL的項(xiàng)目越來越多。在收購(gòu)之前,MySQL在25個(gè)國(guó)家有400名員工,但是存在交流問題。現(xiàn)在Oracle組織了工作在一起的新團(tuán)隊(duì),有的小組在做集群化軟件,有的在做數(shù)據(jù)庫(kù)算法,有的在做備份功能等。
在不久之前,Infoq報(bào)道過系統(tǒng)可擴(kuò)展性的問題,其中有兩處提到了MySQL,包括:
- 用數(shù)據(jù)庫(kù)處理隊(duì)列——MySQL在很多地方都做得很好,但是在處理應(yīng)用程序排隊(duì)方面卻并不理想。你的數(shù)據(jù)庫(kù)中是不是有類似JOBS這樣的表,其中有一個(gè)狀態(tài)列,包括“queued”、“working”、“completed”這樣的值。如果是,你可能把數(shù)據(jù)庫(kù)來處理應(yīng)用中的隊(duì)列工作了。這樣使用MySQL不好,因?yàn)闀?huì)出現(xiàn)鎖的問題,還有查找下一個(gè)任務(wù)時(shí)的搜索和掃描任務(wù)也會(huì)遇到麻煩。建議使用RabbitMQ或者Amazon的SQS方案,因?yàn)檫@些外部服務(wù)更容易擴(kuò)展。
- 用數(shù)據(jù)庫(kù)進(jìn)行全文搜索——Oracle提供全文搜索支持,為什么MySQL卻不能用呢?MySQL確實(shí)有這項(xiàng)功能,但是在很多版本中,只能配合老的MyISAM存儲(chǔ)引擎使用。最好采用Apache Solr等經(jīng)過驗(yàn)證的搜索解決方案,它專門用作搜索,有非常好的庫(kù),開發(fā)者可以使用多種現(xiàn)代web語言進(jìn)行開發(fā),并且非常容易擴(kuò)展。只要在網(wǎng)絡(luò)中增加服務(wù)器,或者做整體分布即可。對(duì)于前沿技術(shù)感興趣的同學(xué),MySQL 5.6中提供了Innodb的崩潰安全和事務(wù)存儲(chǔ)引擎。既便如此,還是建議使用外部解決方案,如Solr,或者Sphinx及MySQL Sphinx SE插件解決。
當(dāng)然,MySQL依然受到Google的青睞,Google目前正在把MySQL做成全面管理的服務(wù)納入云中,其中包括一套用編程方式管理MySQL的JSON API。Google補(bǔ)充提供了Cloud SQL,用來擴(kuò)展自己的云服務(wù)。這個(gè)“全面管理”的Web服務(wù)提供了一個(gè)可伸縮的MySQL數(shù)據(jù)庫(kù),運(yùn)行在Google的基礎(chǔ)架構(gòu)之上。用戶可以通過好幾種方式連接到云里的MySQL實(shí)例:命令提示符、API控制臺(tái)、管理和報(bào)告工具、外部應(yīng)用、GAE上的Java應(yīng)用和Python應(yīng)用,還有GAE腳本。用戶還可以用mysqldump導(dǎo)入、導(dǎo)出實(shí)例。Google還提供了一套實(shí)驗(yàn)性質(zhì)的JSON API,這套R(shí)ESTful接口可以用來對(duì)MySQL進(jìn)行編程式管理:創(chuàng)建、刪除、重啟、從備份恢復(fù)、導(dǎo)入/導(dǎo)出,以及各種實(shí)例信息的獲取。雖然Google同時(shí)提供了命令行和API管理功能,但MySQL實(shí)例還是被自動(dòng)管理的,比如跨不同地理位置進(jìn)行同步或異步的復(fù)制、隨需伸縮、需要時(shí)進(jìn)行備份和打補(bǔ)丁。
