我怎么看 MySQL VS PG 的辩论
首先,技术是可以“辩论”出来谁好谁坏的吗?想辨别哪个数据库好,什么时候是通过辩论,而不是踏踏实实的看流行度、代码质量、实际业务、社区?
接下来谈谈我对昨天这场直播的观感。
第一,就如前面所说,技术本身就不是能被“辩论”出来谁好谁坏的。
第二,双方的实力不对等,MySQL 社区是两位专家,一个早早成名的一直在做MySQL数据库的专家,熟悉 MySQL 源码,另一个是既熟悉 MySQL 又熟悉 PG 源码的专家,一直踏踏实实做技术,而 PG 社区,派出了两个 DBA,一个是包装一下开源组件(也只能)忽悠到陆奇的 yml 工程师,另一个是经验丰富的乙方 DBA,但是很可惜,他们并不熟悉他们吹到天上去的 PG 哪怕任何一个模块的代码,因此只能拿一些问卷结果和刻意失真的数据来吹捧 PG。
姜承尧当场翻别人简历,是比较不体面,但是我觉得他不应该接这个辩论,让别人蹭上这个热度,给别人一种双方真的有(技术上)平等对话的错觉,让别人觉得这是场“技术辩论”。跟一个基础数据都有问题,连事务都弄不清楚,认为分布式数据库都是毫无必要的,建议别人下云攒一堆破烂、然后装上他的 Pigsty、买他的服务的人,实在是没有什么好争的。
第三,就像姜所说的一样,世界上有这么多数据库,什么时候轮到过 MySQL 和 PG 来争这个第一?我确实没怎么看到姜攻击 PG 本身,他一直专注的是 PG DBA 。冯质疑 TPCC 是否还有意义,我不否认 TPCC 是一个比较老旧的模型,但是无论是 Oracle 还是 DB2,他们不再跑 TPCC 的原因,不是这玩意不再是一个有效的测评标准了,而是他们已经把集中式数据库做到了极致,而却又在分布式数据库的发展这一块有很大的缺失,眼下国内正在进行的风风火火的信创,恰恰就是用国内相对较先进的分布式数据库去替代国外的集中式数据库。那么用一个分布式数据库来跑针对集中式数据库的 TPCC 的跑分,也就正符合当下的背景,而且是一次绝佳的广告机会。实际业务里完成业务迁移,对业务 SQL 除了要对一些针对分布式特性做一些调整以外(如避免引发频繁切主的sql、避免广播等),其他基本都不会做什么调整,毕竟时间很紧张,任务很艰巨。只要你基本语法支持做得好,可能有些存储过程支持的不太好,也迁上去就行了。于是我不理解,为什么会有人大言不惭的说 TPCC 已经过时呢,那请你老人家制定一个针对分布式库的标准吧,多么好的“你行你上”的机会啊?
我看 PG 和 MySQL
再从上面提出的流行度、代码质量、实际业务、社区四个维度来审视一下 MySQL 和 PostgreSQL。
流行度,在国内无疑是 MySQL 更高,但是随着信创的推进,PG 套壳的数据库越来越多,假如把这些都算进 PG 的话,那么 PG 份额确实是在非常显著的增加。有利就有弊,这样同时带来一个问题,就是假如名声不好的魔改数据库(如某高斯)越走越远,那它还能被 PG 社区所接受么?PG 社区应该也不会想把这算到 PG 阵营里吧?
代码质量,PG 在查询解析层面略胜一筹,存储引擎没什么优势,MySQL 优化器捉急,存储引擎略胜一筹,但是 MySQL 从8.0开始,就调整了以前跨大版本发布重磅特性的习惯,在 8.0 的某个小版本中对优化器做了很大的改进,根据 MySQL 接下来的发版策略以及 Oracle 的投入程度,有继续改进进步的空间是没什么疑问的,想了解的可以去关注下 MySQL 官网的 worklog 和 blog,里面有很多有价值的内容;
实际业务,使用 MySQL 的大厂更多;
社区及改造,MySQL DBA 最近几年社区是比较颓废;
一个原因是,互联网存量业务已经发展到了瓶颈,而且对于 MySQL 的特性已经改造的非常成熟,加上平台工程、微服务网关的建设,连官方的 MGR 互联网公司都不怎么关心了。我经常告诉自己一个自觉,一定要从业务出发,要从实际出发,在前几年,国内的大厂为 MySQL 提供了非常多有用的特性,输出到了自己的业务/云数据库里(如redo复制),同时一部分特性提交给了 MySQL 官方(如并行复制),这些都是从实实在在的业务需求出发的。而 PG 在前几年显然没有这个机会,为什么以前大厂改造 PG 来解决线上问题的案例没有像 MySQL 一样多如牛毛?不是因为 PG 太完美了,而是规模就不够,问题没暴露出来而已。
另一部分,就是因为 MySQL 官方越来越封闭的政策,假如你有关注过 MySQL 的 release note,你会发现很多修复的 bug 都没法查看。而且在国内信创环境下,各位大佬们都忙着跑马圈地干项目,改进自己的数据库,留给分享的时间不多,不得不说有些遗憾。
但是 MySQL 社区本身并没有停止发展,因为国内 MySQL 已经迈过了输出运维最佳实践的时期,来到了输出内核改造经验以及培养内核人才的阶段。国内大厂/创业公司开源出了很多 MySQL 相关的二开项目,如 TDSQL、PolarDB-X、AliSQL、泽拓数据库等,这些也是很好的学习参考资源,并且也输出了相关的代码解读文章和直播,舞台的主角从 DBA 接力给了内核开发。
在这几年,PG 社区是很活跃,但是小白居多,这也是一个新起来的数据库必须要面对的情况。好在PG 社区的氛围很好,有愿意做事的人(如德哥、唐成、熊灿灿等),国内相关的数据库运维/内核书籍也比较丰富,尤其是内核,也有很多人和组织在培训、考证这一块发力,相信 PG 会越来越好,但愿招摇撞骗吹牛的人,不要再给 PG 招黑了!PG 天下第一,跟你一毛钱关系都没有,你又不是 PG 的 committer。
最后
在国内信创的大环境下,我们不应该把视野局限在 MySQL 和 PG 里,有些国产库已经做的很优秀,越来越多的央国企正在接入,已成事实,多和项目磨合,业务反馈支持人员和内核开发,慢慢改进,探索适合中国的交付体系,这都是需要时间的,希望大家能多一些耐心,少一点戾气,不要像某些人一样,看了个问卷调查结果就急冲冲的跳出来要赢麻。
希望数据库行业越来越好,不要分裂,踏踏实实做事的人多一些,骗子和吹牛的人少一些,这样无意义的直播少一些。不过,听说 DTCC 还要再来一场现实辩论,我只能表示呵呵。