MySQL和PostgreSQL是开源数据库的两大阵营,MySQL号称是最流行的开源数据库,而PostgreSQL则号称是最先进的开源数据库。两个阵营都有各自的拥护者,有时还相互不买账,时不时写个小作文攻击对方的弱点,但是不可否认的是在这场“豚象之争”中逐渐掉队了。
从上述DB-Engine数据库流行度趋势图中可以看出,虽然MySQL仍是最流行的开源数据库,但基本是处于缓慢下降的趋势中。反观PostgreSQL则表现出了强劲的上升趋势,从2013年不到200已经上升到650+,而且近5年其上升趋势非常明显。那么是什么原因让MySQL逐渐掉队了呢?我们几个角度来分析。
所有权的归属问题
MySQL 诞生于 1996年,1999 ~ 2000 年在瑞典成立了 MySQL AB 公司,并采用 GPL 协议开源了自己的源代码。借助于互联网公司的快速发展,MySQL 在数据库领域取得了非常大的成功。2008年1月 MySQL AB 公司被 Sun 以10亿美元收购,2009年4月 数据库巨头又以 74亿美元收购了 Sun 公司,自此 MySQL 数据库进入 Oracle 时代,Oracle 也成为坐拥商业和开源双料第一的数据库公司。也正是这个“双料第一”让开源世界对 MySQL 产生了戒备心理,已经有了商业第一数据库的 Oracle 是否还会真心发展开源数据库产品,也正是这个原因,MySQL 创始人 Michael Widenius 从 Oracle 辞职,创建了新的分支 – MariaDB。尽管从之后的发展来看,Oracle 还是给予了 MySQL 非常多的支持,但始终没有能够打消业界的顾虑。
PostgreSQL 起源于加州大学伯克利分校的 POSTGRES 项目,经历了一系列的挫折之后,在 1994年对外开源,并持续至今。因此 PostgreSQL 并没有受控于某家商业公司,其发展完全是由社区来推动的。产品发展来自于社区,又通过更先进的产品来回馈社区,PostgreSQL 将开源的理念贯彻到极致,也迎来了自身发展的春天。
产品授权
MySQL 采用 GPL 开源和商业授权的双授权模式。商业授权需要付费从 Oracle 购买,GPL 开源协议的要求也比较严格,利用 GPL 开源软件开发出的新产品也必须开源。
PostgreSQL 采用 PostgreSQL License,是一种类似于 BSD 或 MIT 的开源协议,用户可以使用、拷贝、修改和分发 PostgreSQL 软件和文档,将其用于任何目的而不需要支付任何费用,唯一的要求是将指定的一段版权申明放到新的产品中。
客观来说,MySQL 的 GPL 协议更加符合开源生态的利益,毕竟"取之于社区、用之于社区"是开源项目最本质的诉求。但遇上了 PostgreSQL 这种完全开放、不要命的打法,也只能是感叹“既生瑜何生亮”。
正因为如此,出众多基于 PostgreSQL 开发的数据库产品,如 Greenplum、OpenGauss、Kingbase 等等,它们公开的宣称自己的产品是基于 PostgreSQL 开发的,而完全不用担心违反开源协议的问题。而反观那些基于 MySQL 开发的产品,还需要整理一套自己的说辞,来规避可能存在的授权违规问题,但即便如此,授权问题始终是一把“达摩克利斯之剑”!
可扩展性产品架构
习惯了 Oracle 整体性的体系架构之后,再去看 MySQL 计算和存储引擎分离的架构,会感觉有些“另类”,但正是这种灵活的存算分离架构,让 MySQL 能够支持多种存储引擎,大大扩展了 MySQL 的使用场景。
PostgreSQL 的扩展性更多的体现在功能方面,社区实现了大量强大的扩展,让 PostgreSQL 的支持更加广泛。这种架构的好处是在维持核心代码清晰简洁的基础上,又便于社区进行扩展,对于开源软件和二次开发者来说实在是再好不过。
写在最后
对于用户来说,选择数据库并不是一件容易的事情,不仅要考虑这个产品未来的 10年是否还存在,更要考虑是否能够随着时间的推移而发展,满足未来的技术需求。对于有志于在数据库领域长远发展的厂商来说,选择合适的来源路线来发展自己的产品,更是关乎生死存亡的大事,谁又愿意把自己的未来放到不确定的路线上呢!
MySQL 受限于所有权归属和开源协议,在和 PostgreSQL 的开源头号交椅的对决中落了下风,但这个问题有解吗?个人觉得很难。过于强大的 MySQL 不符合 Oracle 的根本利益,所以 Oracle 不可能将 MySQL 托管到开源基金会,也不会修改 MySQL 的开源协议。那么还会有另外的 MySQL 分支站出来,替换掉现有的 MySQL 吗?MySQL 创始人 Monty 已经做过尝试,MariaDB 似乎发展的也不是很好。
趋势一旦形成就很难逆转,对于普通用户来说只能顺应,那么到底谁将会是世界第一的开源数据库,你的心里有答案了吗?