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 参考架构”。