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