選擇或者放棄MySQL的理由

huidaoli發表於2013-07-20

MySQL 作為一個開源資料庫,自從被 Oracle 接管後,其發展前景就一直受到開發社群的關注,其中也有質疑,最近,兩位開發者分別發表了選擇放棄MySQL 的理由,值得資料庫相關人員參考。

  Andy Patrizio 列舉了放棄 MySQL 的五個理由,包括:

  1. MySQL 並不像其他關係型資料庫那樣成熟。MySQL 剛起步時並不是一個 RDBMS,但是後來改變了發展方向,增加了更多的功能。在許多人眼裡,其他成熟、歷史久的關係型資料庫依然比 MySQL 功能更加豐富。如果你想要一個功能豐富的 RDBMS,那麼可能會選擇 PostgreSQL 或者其他商業產品,比如 Oracle 或者微軟 SQL Server。PostgreSQL 程式碼貢獻者 Selena Deckelmann 表示 Postgres 對於需要關係型資料庫的 Web 開發者來說是一個正確的選擇,隨著對 JSON 資料結構和 PLV8 的支援,Postgres 會成為 NoSQL 的預設選擇。
  2. MySQL 雖然是開源的,但只是形似。從技術上說,MySQL 是一個開源資料庫,但是實際上,開發者已經感覺異樣。在 Oracle 的管理下,MySQL 現在有一些專利保護和私有模組。Paula Rooney 表示,MySQL 的活躍只停留在表面,Oracle 控制著開發程式,並且拒絕釋出測試用例,安全補丁也受到嚴格控制。Oracle 是不是應該把 MySQL 奉獻給 Apache?其實你有其他開源替代品,比如 MySQL 的一個分支 MariaDB 一致是真正的開源。MariaDB 的所有程式碼都是在在 GPL、LPGL 或 BSD 協議下發布的,不存在類似 MySQL 5.5 企業版那樣的私有模組。
  3. MySQL 的效能表現沒有其他競爭者好。MariaDB 部落格提供了 MySQL 和 MariaDB 基準測試的結果,後者勝出。PostgreSQL 開發者表示 Heroku Postgres 更有吸引力,“它們是 Postgres 最大的託管環境,自動處理應用的擴充套件,支援外掛……”
  4. MySQL 由 Oracle 掌控,而不是社群驅動。MySQL 自從被 Oracle 接管折後,雖然沒有明顯改變過方向,但是 Oracle 的存在還是讓開發者感到緊張。MySQL 和 MariaDB 地創始人 Michael “Monty” Widenius 表示,最糟糕的是,社群不可能與 Oracle 的開發人員一起參與 MySQL。而且,Oracle 拒絕接受補丁,也不願意公佈路線圖。
  5. 放棄 MySQL 的人越來越多。就那今年來說,Redhat、Slackware Linux、OpenSUSE、Wikipedia 都先後宣佈放棄 MySQL,採用 MariaDB。Wikimedia 架構師 Asher Feldman 解釋說,MariaDB 的優化程式增強功能和 Percona 的 XtraDB 功能設定是作出改變的根本原因。“我們歡迎並支援 MariaDB Foundation 成為一個非盈利組織。”

  而 Rikki Endsley 則列出了選擇 MySQL 的五個理由:

  1. MySQL 的投入和創新超過以往。自收購以來,Oracle 已經增加了 MySQL 的開發人員,並提供了更加成熟的工程模式,不再像以前典型的開源專案一樣,開發人員散落在世界各地。同時,MySQL 的程式碼更加模組化,這意味著短期的投入會獲得長期的回報。在 MySQL 5.6 中,他們分解了 MySQL 伺服器的關鍵鎖——LOCK_open,效能改進了一倍多。此外,MySQL 的儲存引擎是 InnoDB,Oracle 在 2005 年收購了 InnoDB。因此,兩者可以更好的結合。
  2. MyDQL 產品依然健壯。MariaDB 和其他開源產品抱怨 MySQL 5.5 沒有測試用例和某些企業功能是私有模組,但是它依然表現突出,Oracle 花費了兩年釋出 DMR 給 MySQL 社群來測試和得到反饋。MySQL 5.6 從之前的 4 CPU 執行緒增長到 64 CPU 執行緒,還有其他新功能。
  3. MySQL 關注 Web、Cloud 和 Big Data。為了支援雲服務,MySQL 的備份做了極大地改進,比如 Global Transaction Identifiers (GTIDs). GTIDs 可以輕鬆地跟蹤和比較 master 和 slave 伺服器之間的進度狀態。在 2013 年 4 月,Oracle 釋出了針對 Hadoop 的 MySQL Applier。Nokia 首先將 MySQL 應用於大資料環境中,包括集中的 Hadoop 叢集等等。
  4. MySQL 企業版 5.6 增加了高可用性功能,比如備份等,還有企業版監控器,可以持續的幫你監控資料庫並提供最佳實踐。還有 Query Analyzer 來監控應用的效能,同時還有豐富的管理工具用於伺服器配置和使用者管理。
  5. 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 參考架構”。

相關文章