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