Percona最近发表了一篇文章,替MySQL出谋划策,期待赶上PostgreSQL,不过Percona本身就存在利益相关,所以大家批判性理解,我根据自己的理解做了点改动。
图片
1.所有权和治理
MySQL相比PostgreSQL不是开源社区驱动的,早期MySQL还是很重视社区并获得了信任,所以大公司也并不并不将其视为威胁。但到了Oracle收购MySQL后,情况就变化了,大公司特别是云服务提供商,将Oracle视为竞争对手,他们不可能给MySQL贡献代码。
而PostgreSQL由社区运营,PostgreSQL基金会是一个非营利组织,所有公司在PostgreSQL生态系统中都是平等的,贡献给PostgreSQL不会为竞争对手创造价值,社区在PostgreSQL项目方向上有更大的影响力,数百家小公司使PostgreSQL在全球范围内无处不在。
针对MySQL来说,社区能做到不多,因为决策来源于Oracle,他们更关注利润,而不是为了扩大市场规模。
2.License
MySQL是通过GPLv2和商业许可证进行双重许可的,用户可以选择在GPLv2下使用MySQL,这要求所有基于MySQL的修改和衍生作品也必须开放源代码。不过,用户也可以购买Oracle提供的商业许可证,这样就可以在不公开源代码的情况下进行商业化。
以AWS Aurora来说,作为一个兼容MySQL的成功衍生版本,AWS可以基于MySQL的源代码创建自己的版本并进行商业化,但这通常是在云服务的形式下进行的,并不需要开放源代码给客户,而是将其作为服务提供。
而PostgreSQL则通过非常宽松的PostgreSQL许可证进行许可,所有人可以轻松地创建商业许可的PostgreSQL衍生版本或将其嵌入到商业许可的项目中,对于推广PostgreSQL非常有益。
对于Oracle肯定还会坚持双重许可,虽然市面上也有“Cloud Only”和“Open Core”这样的商业模式取得了成功,但对于Oracle来说,双重许可的模式更为直接。
3.社区
社区分三方面,比如对于我来说,就是用户社区的一份子,专注于使用,这方面MySQL的基数还是很不错的,但越来越多的新应用选择使用PostgreSQL。
贡献者社区,这方面PostgreSQL的贡献者社区更加强大,因为它有很多组织参与,而不是仅仅依靠一家公司,他们会定期举办各类的活动进行贡献,另外PostgreSQL的扩展属性也更容易方便开发者对其进行贡献。
供应商社区,这方面MySQL就比较薄弱了,因为帮助推广MySQL可能最终只是在为Oracle创造价值。
对于MySQL来说,Oracle可以主动与潜在的贡献者交流,举办一些活动,让外部贡献者参与,分享他们的计划,并支持与MySQL社区发展方向一致的贡献工作。
4.架构
PostgreSQL被设计为可扩展的,拥有大量强大的扩展,而MySQL的扩展能力则相对有限,这种可扩展性使得PostgreSQL的创新变得更加容易。
但对于MySQL来说,选择了不一样的模式,可扩展可能并不是他的有些选项。
5.开源产品的动力
选择数据库是一项长期的赌注,因为更换数据库并不容易,选择数据库的时候比如考虑未来,思考随着时间的推移,你选择的数据库会满足未来的需求吗。
对于Oracle来说,已经将许多开发重点转向专有和云专属的MySQL版本,不会太考虑MySQL社区,这就是他的模式。
那社区能做什么呢?
这里重点提到了,Percona Server for MySQL,他是一个完全兼容MySQL的开源替代方案来替代MySQL,直白点就是fork版本,核心是兼容性,为了避免与上游(Oracle)的合并成本过高。
那MariaDB怎么样呢?他走的路是完全和Oracle MySQL分割,倡导创新,每个新版本和MySQL的偏离程度也越来越大。
MariaDB则做出了不同的权衡;无限制的创新使其与MySQL的兼容性降低,每个新版本的偏离程度也越来越大。
6.MariaDB
MariaDB开始也是由MariaDB基金会管理,但他是有缺陷的,尤其是在知识产权(IP)方面,特别是商标方面,它没有拥有所有的知识产权,还是由一家公司(MariaDB公司)控制,存在存在商标垄断的问题,和PostgreSQL的社区模式完全不一样,并非“人人平等”。
目前MariaDB被K1公司收购,这为MariaDB的治理和商标所有权的变更提供了机会,使其更加接近PostgreSQL的模式,但估计不会成为现实。
虽然MariaDB基金会可以给MariaDB进行更名获取完全的控制,但失去了MariaDB的品牌,就等于失去了知名度。
既然说了那么多,percona为什么不走MariaDB早期设想的那条路呢?我个人觉得发不了大财,那就发点小财?
参考:https://www.percona.com/blog/how-can-mysql-catch-up-with-postgresqls-momentum/