如何看待 MySQL vs PGSQL 直播闹剧
2023-08-09 晚上,开源中国举办了一场 《MySQL 和 PostgreSQL,谁是世界第一?》的主题辩论活动,我作为 PostgreSQL 方代表参与。本来准备了一些数据与资料,想着来一场建设性的交流,擦出些思想火花。却不想这场直播在姜某人的胡搅蛮缠下变成了一场闹剧与大笑话,我感到遗憾 —— 浪费了观众们的时间。
这场辩论的缘由要追溯到上个月我写的这篇文章:《PostgreSQL:世界上最成功的数据库》。姜某立即针锋相对的回应了一篇《MySQL:这个星球最成功的数据库》。可惜文中充斥着大量事实性错误,谎言与诡辩,扣大帽子和人身攻讦。其人在直播中更是变本加厉:在事实数据和技术理论都辩不过的情况下,使出了无赖一般的撒泼手段。在技术讨论中对于数据上的挑战视而不见,却把我的个人简历搜出来诘问,诉诸人身,口吐芬芳,扣大帽子,实在难绷。侮辱了活动嘉宾,浪费了观众时间,更是中国互联网行业与MySQL 社区的耻辱。
与这样的人对垒,即使赢下了辩论也让人有吃苍蝇的感觉。但我秉持这样一种理念:你不能把世界让给那些你所厌恶的人。所以即使恶臭难当,我也要捏着鼻子上来干,为 PostgreSQL 正名。他选择了不体面,那我就用数据与事实来帮他体面。
更新:
辩论完后,姜的公众号还特意发了篇文章:《这个前阿里 P5 架构师,竟然说 OceanBase 打榜 TPC-C 是傻X行为》来继续人身攻击,因此在这里更新一些回应:
直播喷人没够,还想继续呢?
这个标题虽想嘲讽我,但我确实曾经是P5架构师。以及我确实认为 TPC-C 打榜是 SB 行为,实际上我的观点是:在现代硬件环境下,我认为这些《分布式数据库是伪需求》。
更新:关于个人履历
姜在直播中浪费大量时间来质疑我代表 PostgreSQL 社区的资格,且不说在一场技术主题辩论中不谈技术道理先搞起排资论辈是多么可笑的一件事,排资论辈时还要拿别人刚毕业的 P5 履历来说是就更滑稽了。直播中,姜还“因为我用英文简历”给我扣上“不是中国人不爱国”这种大帽子:说起来,我乃中国护照无境外永居,一个拿绿卡的人给别人扣这种帽子真的很搞笑。
即使真比履历来,我也一点儿都不怵。在阿里期间我曾在友盟 FinPlus 担任Tech Leader,和另外一位产品经理与算法工程师一起搞起了这个内部创业项目,从 16 年到现在每年1个亿营收,是友盟营收的扛把子。就是在这个项目里,我选型了 PostgreSQL + Go,从阿里这个 Java 与 MySQL 的大本营中独自杀出了一条血路。我本科毕业3年时间拿下苹果 ICT4 = P8+,毕业7年30岁不到自己出来创业当CEO。姜想用 P5架构师这个来羞辱我,我就当它在给我打广告了。
实际上我最有代表性的工作经历既不是在阿里也不是在苹果,而是在探探 —— 这个北欧风、小而美的创业公司,与一票瑞典 Old School 工程师,各领域顶尖人才共事的几年。这里在技术水平与品味上吊打一系列所谓的“互联网大厂”。450万数据库 QPS,一两万核的 PostgreSQL 数据库集群,几百TB 不重复的 OLTP 数据,这样的PostgreSQL 部署规模与负载水平,在当时放在全中国排进前三不成问题。
无论是在阿里,探探,还是苹果,我的工作始终紧密围绕着 PostgreSQL。而现在我更是选择成为 PostgreSQL 方向的创业者,为全球 PostgreSQL用户与中国的数据库事业做出自己的贡献。我为全球 PostgreSQL 生态贡献了一个最强开源监控系统 Pigsty ,在 OSSRank 中 PostgreSQL 生态项目中排名第39;我为社区维护打造了一个开源免费,开箱即用的 PostgreSQL 数据库发行版,一次性用户在解决使用 PostgreSQL 会遇到的各种问题,帮助用户用好 PostgreSQL,各种行业,互联网/自动驾驶/金融/航天/部队/外企都有用户。
除此之外,我还是一名独立开源贡献者:我翻译过 《设计数据密集型应用》 与 《PostgreSQL指南:内幕探索》 两本书,前者是互联网应用开发的经典名著,后着是 PostgreSQL 数据库内核原理剖析,我也在各种大会与论坛上分享了大量原创新颖的 PostgreSQL 相关案例。在 Github Star Ranking 上,我以 21951 总 Star 在全球开发者中排名 523。
我本人是 PostgreSQL 中文社区的开源技术委员,经过社区主席与委员们的支持与同意,代表 PostgreSQL 中文社区参加本次活动。反观姜,直播一上来就强调自己不代表公司与MySQL社区,只代表个人。既然它不能代表 MySQL 社区,又来参加这个活动作甚?反而还倒打一耙质疑我能不能代表 PostgreSQL 社区,这就是以己度人了。
一粉顶十黑,我不知道姜为 MySQL 生态做了什么贡献,但它四处恶意攻击诋毁其他数据库引战的行为,早就引发了包括不只是 PostgreSQL 社区的强烈反感,毫无疑问是 MySQL 社区乃至整个中国互联网技术界的声誉负资产。可惜,这次它恐怕踢到铁板上了。德哥这样的翩翩君子难防它这样的龌龊小人,但我们这一代就是要豪迈,敢同恶鬼争高下,不向霸王让寸分,舍得一身臊,也要让它这种技术界的害群之马现现眼。
更新:关于打榜SB行为
我确实认为 TPC-C 打榜是一种 SB (sysbench)行为。TPC-C 已经是30年前的老东西了,在 OB 打榜前已经有快10年没人来玩了,没有办法有效反映当下数据库性能需求,技术参考价值比 sysbench 并发-延迟曲线都差远了。TPC-C 这是一个可以靠堆机器来近乎无限刷高数字的评测。OB 和 TDSQL 这两个数据库花了几个亿放了个大炮仗,给国外评测委员会滋滋送钱,放卫星吹亩产万斤的牛逼,请问这不是 SB 行为是什么?这才是让“国产数据库”蒙羞。
我不仅认为这种行打榜行为本身是 SB 行为,我认为随着硬件性能指数增长,在当下,这类分布式数据库本身已经成为伪需求了!参见拙作:《分布式数据库是伪需求吗?》。
关于 TPC-C 打榜这种事,专家们本来是看破不说破,但心里都门儿清,下面是一些有趣的评论,我后面也会写一篇专门的文章来揭开这里的画皮,敬请期待。
关于 TPC-C 打榜的有趣评论
更新:MySQL 事务机制缺陷
姜的驳文中唯一与技术搭边的,就是这个 MySQL 事务原子性缺陷问题了。
MySQL 事务原子性缺陷
在这个例子中,我们使用 MySQL/InnoDB 最新版本(8.1仍存在),默认配置,开启一个事务执行两条 DML 语句。第一条成功,第二条失败,最终执行 COMMIT,结果竟然是部分成功的中间状态(一条成功一条失败)。
ACID 原子性的定义特征是:能够在错误时中止事务,丢弃该事务进行的所有写入变更的能力。简而言之:All or Nothing。在这个例子中,第二条语句失败后执行 COMMIT 后最终的结果是“中间状态”。毫无疑问是破坏了事务的原子性。
这个问题,至少在两年前《为什么说PostgreSQL前途无量?》中,我就抛出来了。当时引发了 PostgreSQL 与 MySQL 社区的震惊与大讨论,最后MySQL 社区嘴硬认为这是一个 Feature 。理由是这个行为可以通过修改参数来改变。但不管 MySQL 方如何辩解都无法改变这一事实 : MySQL 在默认情况下,允许用户做出这种违背原子性的蠢事。
要求用户自己显式决定处理 COMMIT / ROLLBACK,等于把这一责任推卸到了开发者身上。如果这是一个 Bug 那还好,只要修复了就行。如果这是一个 Feature,那就是 Stupid by Design:默认允许用户做蠢事,除非显式配置。
PostgreSQL 或者任何一个头脑正常的软件,它的设计原则都应当是:默认不允许用户进行导致数据错漏丢的蠢事,除非用户显式声明。一个基础核心软件,是不应该为了任何“便利”/迎合菜鸟开发者的理由,去在正确性上妥协的。考虑到小白用户特别喜欢 MySQL (初学者中使用率占58%),那么这种原子性上的设计缺陷,以及隔离等级上的实现缺陷(《并发异常那些事》),就更说不过去了。
StackOverflow 问卷说了什么?
2023 年 StackOverflow 调研结果新鲜出炉, 来自185个国家与地区的9万名开发者给出了高质量的反馈。在今年的调研中,PostgreSQL 在数据库全部三项调研指标(流行度,喜爱度,需求度)上获得无可争议的全能冠军,成为真正意义上“最成功”的数据库 —— “PostgreSQL is the Linux of Database!”
当我们说一个数据库“成功”时,究竟在说什么?评价一个数据库有许多标准:功能、质量、安全、性能、成本,但没有哪种可以普世泛用。不过 Succeed 既代表成功,又代表继承,所以成功与“后继有人”相通。对一项技术而言,用户的规模、喜好、需求决定了生态的繁荣程度,唯有这种最终存在意义上的神意裁决 —— 才能让所有人心服口服。而连续进行7年的 StackOverflow 年度开发者调研为我们窥见技术发展流行趋势打开了一扇窗户。
PostgreSQL现在是全世界最流行的数据库
PostgreSQL是开发者最喜爱欣赏的数据库!
PostgreSQL是用户需求最为强烈的数据库!
StackOverflow 2017 - 2023 调研数据整理
过去7年SO调研数据展示地址:Public Demo | Github Repo: dbrank
流行度代表过去,喜爱度代表现在,需求度代表将来,这三个指标很好地反映了一项技术的生命力。存量与增量,时与势都站在 PostgreSQL 一侧,恐怕在几年内恐怕都不会有任何能挑战 PostgreSQL 地位的竞争对手。
关于 StackOverflow 问卷数据的解析,还请参考拙作:《PostgreSQL:世界上最成功的数据库》
分析这份问卷调查结果,特别是关于 PostgreSQL 与 MySQL 的数据,我们不难得出以下结论:
SO问卷调查:PostgreSQL vs MySQL
- PostgreSQL 流行度持续上升,正在崛起,势不可挡。
- MySQL 流行度持续下降,正在过气,持续衰落。
- 从全球来看, MySQL 的流行度已经被 PostgreSQL 超越了。
StackOverflow 问卷能否代表全球?
姜某开门见山,一顶大帽子先上来。作者认为这个调查问卷没有涉及中国市场,所以不足以称 “全球”。
“你不是中国人么?”
由于众所周知的原因,中国用户在国际社区参与度偏低。例如,StackOverflow 2023 调研的国别用户画像中,中国开发者仅占总数的 0.75%,排名第 28 ,显然与一个“开发者大国”的身份不相符。
中国开发者占总体 0.75%
不过在全球范围内的流行度, PostgreSQL 升 MySQL 降的结论,并不会因为中国开发者参与度偏低而有改变:而只要这个趋势是确定的,那么结论3,这个交叉点的发生就是必然的:Soon or Later。根据现有数据,这个流行度的交叉已经在今年发生了。但是我们可以深入探索一下这个问题:如果中国开发者按照应有的比例参与了这一次全球问卷调查,结果又会有什么不一样呢?
要用中国开发者校正全球调研数据,我们要确定两件事:未参与调研的中国开发者应当占多大的权重比例,以及这些未参与调研的中国开发者中,MySQL 与 PostgreSQL 的使用率各自是多少。
根据 Github 用户统计,中国开发者约全球开发者总数 10% (1千万 of 1亿) ,根据 新华网 报道,2022年中国数据库市场占全球 7.2%。考虑到 StackOverflow 2023调研已包括 0.75% 的中国开发者,综合以上三方面考虑,可初步将未纳入统计的中国开发者比例定为 8%。
因为没有其他权威数据可供参考,我们合理假设中国市场开发者中,使用 MySQL or PG 任一数据库的开发者比例与全球相同 ( (41.1 + 45.6) / 2 = 43.35),而两者的比例分布与 百度热搜 给出的半年指数(pgsql:mysql = 1260:5283)成正比,则根据假设可估算得:
百度指数:PostgreSQL vs MySQL
中国 PostgreSQL 使用率约为:2 * 43.35 * 1260 / (1260 + 5283) = 16.7% ,中国 MySQL 使用率约为:2 * 43.35 * 5283 / (1260 + 5283) = 70% 。
按照加权算法,今年中国修正后的全球数据库流行度,仍然是 PostgreSQL 高于 MySQL:
PostgreSQL: 16.7 * 0.074 + 45.6 * 0.926 = 43.46%
MySQL: 70 * 0.074 + 41.1 * 0.926 = 43.24%
可以看出,即使经过“未参与的中国开发者”的估算校正,全球开发者中 PostgreSQL 与 MySQL 的流行度关系依然没有发生质变。我们即使退一万步说,所有参数都使用最利于 MySQL 的估算,最多也就是将这个转折点推迟几个月的时间。至于算上未纳入调研的中国开发者后,PostgreSQL 到底什么时候超越 MySQL 成为全球最流行的数据库,今年年初或是明年年中那已经不重要了。
菜鸟都在哪儿呢?
作者又提出,StackOverflow 答问卷的大概率都是菜鸟。我相信他一定没有完整阅读 StackOverflow 2023 开发者调研的完整报告,否则不会出现这种基础的事实性错误。
StackOverflow 在 Developer Profile 中完整给出了参与调查人口的画像。其中概率最大的用户群体是具有 5-9 年(专业)编程经验的开发者,国内大致属 P7 层次,怎么也称不上是刚入门的初级码农与学生。事实上本次调研中无论是学生,还是初学码农的比例都是清楚给出的:学生的比例只有 2.6% ,而初学者的比例为 5.6% ,无论如何也称不上是 “大概率”。
SO Survey Developer Profile
对于数据库调研,Stacok Overflow 还给出了一个有趣维度:专家与初学者。总体中,专业开发者占 94.4%,菜鸟占 5.6% 。我们可以清楚看出 PostgreSQL 更受专家欢迎(使用率:49.1% vs 40.6%),而菜鸟会更偏爱 MySQL (使用率:58.4% vs 25.5%)。
PostgreSQL vs MySQL: 专家与初学者使用率
在 “Worked with & want to work” 一节中,我们还可以看出:对于菜鸟来说,唯一显著的数据库间流动正是从 MySQL 流向 PostgreSQL 的。这意味着很多菜鸟开发者在成长为专业开发者的过程中,从 MySQL 迁移到了 PostgreSQL。
初学者数据库转移和弦图
综上所述,StackOverflow 调研的主体是专业的开发者,而且在专业开发者中, PostgreSQL 要比 MySQL 更受欢迎的多 —— 在专业开发者中,PostgreSQL 的流行度在去年就已经超越 MySQL 了。
搜索引擎指数更权威?
在文章的第一部分,作者又对 StackOverflow 问卷调研的可信度提出质疑,理由是有一个 “更为权威” 的数据库排行榜:DB-Engine 。而在 DB-Engine 排行榜上, MySQL (2nd)比 PostgreSQL(4th) 更高。
所谓 “最权威” 的数据库排行榜 DB-Engine 属于综合性热搜指数,将 Google, Bing, Google Trends,StackOverflow,DBA Stack Exchange,Indeed, Simply Hired,LinkdedIn,Twitter 上的间接数据合成了一个热搜指数。
在统计分析中有许多种数据收集方法,不同的方法有不同的可信度与说服力。当你没有其他数据可以参考时,DB-Engine 可以作为一个参考。但想要推翻问卷调查的结论,必须使用具有更高可信度/说服力的数据,而不是一种可信度/说服力更低的数据。
StackOverflow 年度调查属于对全世界开发者的一次抽样调查,使用问卷调研的形式,具有中~高程度的可信度与说服力。对于数据库流行度、喜爱度、需求度这样的问题,普查、实验、大数据这些方法成本过于高昂(无限趋近于不可能),可行的数据收集方式也就是 问卷调研,案例研究,搜索引擎 这几种。
StackOverflow 作为全球开发者密集的大本营,已经连续进行了7年的开发者年度调研。2023 年参与者更是达到了 9 万,这是一个非常惊人,也足够具有代表性的样本数量。(作为参照,Github的 Octoverse 年度调研也只有1万出头的样本)。称其为最为权威的全球开发者问卷调研恐怕也没有问题。
Stack Overflow 作为一种问卷调研/样本调研的第一手数据收集方式,在可信度与说服力上是显著强于任何搜索引擎趋势分析的。
根据最近三年的热搜分数进行线性回归
搜索引擎热搜数据具有一些局限性:首先:指数可以比较准确地揭示一个关键词本身的流行度趋势变化,但横向可比较性没有那么强。其次:你无法区分用户搜索的目的,究竟是因为喜爱支持,还是遇到了糟心的问题需要解决,最后:PostgreSQL 至少具有5种变体名称:pg, psql, pgsql, postgres, postgresql , 在 SEO 上相比 MySQL 天生处于劣势。
尽管如此,我们依然能够从 DB-Engine 中看出 PostgreSQL 流行度持续上升,MySQL流行度持续下降的趋势。实际上,排行榜 Top10 的数据库除了 PostgreSQL,热度全都在下降。而 Top20 的数据库热度再抛除两个大数据分析产品 Snowflake 与 Databricks 也全都在下降。可以说 PostgreSQL 是数据库领域一枝独秀的存在!
尽管从 DB-Engine 热度榜上来看,PostgreSQL 的热度仍然不及 MySQL,按过去三年的趋势回归的交叉点大约在 2031-05 ,没有支持我们的结论3(已经发生);但好在这个问题本身已经被说服力更强的问卷调查回答过了,那么说服力更弱的热度榜也无法推翻这一点。
综上所述:DB-Engine 同样证明了 PG升 MySQL 降的趋势,但无法推翻问卷调查得到的精准的流行度对比结论。
搜索引擎趋势上的洞察
姜接着根据“搜索引擎数据”提出:全球 MySQL 流行度是 PostgreSQL 的 3 倍,在中国 MySQL 流行度是 PG 的 6 ~ 7 倍。我们上面已经说过了,搜索引擎热搜的数据无法推翻具有更强效力的问卷调研,但这不妨碍我们来看一看这些搜索引擎数据又能为我们带来什么新的洞察?
韩国是 MySQL 热度最高的一批国家中唯一的一个发达国家
首先来看 Google Trends,搜索 PostgreSQL 与 MySQL 两个关键词,可惜 MySQL 没有“主题”类目,PostgreSQL 没有 “软件” 类目。我们按照下面的配置拉取[最近 30 天的热搜数据](https://trends.google.com/trends/explore?date=today 1-m&q=%2Fm%2F05ynw,%2Fm%2F04y3k&hl=zh-CN)。
没有选择字词搜索的原因是:PostgreSQL有至少5种拼写变体
可以看到,全球 MySQL:PgSQL 热度 = 57:77,约1.35倍,多1/3是有多,多3倍,这就属于夸张了一个数量级了。
让我们把时间拉长到最大的 2004 年至今来看一看,可以看出 MySQL 从 2004 年迄今,有着非常明显的一个热度衰减。而PostgreSQL 从大约从 2014 年,开始有了一个蓬勃的增长。(当然和 MySQL 都在疫情三年被砸掉一个坑)。
MySQL vs PostgreSQL 全球热搜指数
PostgreSQL 全球热搜指数
接下来让我们看一看按照国家区分的 PostgreSQL vs MySQL 搜索引擎指数相对比例,这里我们拉取[最近一个月的数据](https://trends.google.com/trends/explore?date=today 1-m&q=%2Fm%2F05ynw,MySQL&hl=zh-CN) 看看当下最新的情况:可以看到,并不像原作者说的:“PostgreSQL 相对流行度最高的国家是中国,美国仅排名第67“,事实是, PostgreSQL 相对流行度最高的国家是 哈萨克斯坦与俄罗斯,美国排名第18(PostgreSQL:MySQL = 53:47 ,PG更高),而中国,则是 PostgreSQL 相对流行度最低的国家! 二不像是作者所说:中国是 PG 最流行的国家,这种事情用健全直觉判断都知道是不可能的。
默认未包括搜索量较低的地区,分别按照 PG / MySQL 的关注度排序
全球搜索引擎数据,依然支撑我们 PostgreSQL 流行度不断增长,MySQL 流行度不断衰减的判断。当然,与 DB-Engine 一样,全球的热搜指数目前仍然是 MySQL 略高一筹,但依然无法推翻问卷调查得到的精准的流行度对比结论。当然,这也不妨碍我们继续看一看,有哪些国家,PostgreSQL 直接连热搜指数都干翻 MySQL 了。
哪些国家 PostgreSQL 更流行?
首先,让我们来看看旧世界霸主两极 —— [美国](https://trends.google.com/trends/explore?date=today 1-m&geo=US&q=%2Fm%2F05ynw,MySQL&hl=zh-CN)与[俄罗斯](https://trends.google.com/trends/explore?date=today 1-m&geo=RU&q=%2Fm%2F05ynw,MySQL&hl=zh-CN)的情况。有趣的是,拉取这两个国家的热搜指数,PostgreSQL 都已经超过了 MySQL。
在[美国](https://trends.google.com/trends/explore?date=today 1-m&geo=US&q=%2Fm%2F05ynw,MySQL&hl=zh-CN)的数据中,PostgreSQL:MySQL = 69:61,PG 热度约是 MySQL 的 1.13 倍,在[俄罗斯](https://trends.google.com/trends/explore?date=today 1-m&geo=RU&q=%2Fm%2F05ynw,MySQL&hl=zh-CN)的数据中则更为离谱,PostgreSQL:MySQL 达到了 70:22 ,也就是 3.18 倍!而[中国](https://trends.google.com/trends/explore?date=today 1-m&geo=CN&q=%2Fm%2F05ynw,MySQL&hl=zh-CN)的数据相反:过去30天,MySQL 热度是 PostgreSQL 的 4.8 倍。
美国30天热搜:蓝色 PostgreSQL,红色 MySQL,69:61
俄罗斯 30天热搜:蓝色 PostgreSQL,红色 MySQL,70:22
中国 30天热搜:蓝色 PostgreSQL,红色 MySQL,13:63
作为一个参考对照,我还特意检查了俄罗斯国民搜索引擎 Yandex,与中国国民搜索引擎百度指数的数据,结果基本上与 Google Trends 对应地区的指数吻合。
Yandex 最近30天关键词统计:PostgreSQL 是 MySQL 热度的1.5倍
百度指数最近30天:PgSQL:MySQL = 1228 : 4360,MySQL热度约为PG 3.5倍
当我们下载 Google Trends 按地区划分的30天相对热度数据,并绘制在柱状图上,不难发现,越是发达国家,PostgreSQL 相对 MySQL 的使用率越高!例如,左侧是 PostgreSQL 相对热度最高的国家,右侧是 MySQL 相对热度最高的国家,发达国家用绿色标出,发展中/不发达国家用红色标出。这里可以看到,原作者特意强调的“韩国”,恰好是 MySQL 使用率 Top 国家中最显眼的,唯一一个发达国家特例。
如果我们定量分析,PG - MySQL 热度差值与发达国家这个变量之间的相关性,会发现两者的相关系数高达 r = 0.6 ,踩在了强相关的门槛上。
越是发达国家,PostgreSQL 的相对搜索热度就越高;虽然相关未必因果,但不禁让人对着里面的原因感兴趣。这可倒真是应了 PostgreSQL Slogan 那句:世界上最先进的开源关系型数据库。
中国特色
在 Google Trends 上,中国则有些特殊:像是热度图向右偏移了10年左右的样子。MySQL 在中国的热度在 2014 - 2015 年达峰 (也许与阿里上市有关),随即进入衰退通道。与全球走势保持 10 年左右的滞后关系。
在百度指数上,也能观察到类似的起伏,此外,相比 Google 中国地区热搜趋势,还有额外5年的滞后性。
当年苏联点错了科技树,走了真空管计算机而不是晶体管集成电路的路线,错过了信息时代浪潮,当引以为戒。押宝过时的数据库技术虽然不至于像点错芯片科技树那样伤筋动骨,但也是巨大的人力物力财力智力浪费,不可不察也。
作为一个佐证,华为作为民族企业标杆,战略眼光是没得说的。在10年前就很明智的选择基于 PostgreSQL 9.2 进行分叉,打造自己“自主可控” 的 openGauss 数据库,不带正眼瞧 MySQL 一眼,就已经很能说明许多问题了。
MySQL 的用户都流失到哪儿去了?
原作者承认 MySQL 的流行度在下降,但将其归因为生态百花齐放,而不是因为 PostgreSQL 的冲击替代。
![img](v2-78136826f1ada2e72fd759c7c0fbed4c_1440w.jpg
毕竟,MySQL 树大招风:前有狼后有虎,上有野爹下有逆子:在严谨的事务处理和数据分析上,MySQL被同为开源关系型数据库的 PostgreSQL 甩开几条街;而在糙猛快的敏捷方法论上,MySQL又不如新兴 NoSQL。同时,MySQL上有养父 Oracle 的压制,中有 MariaDB 分家,下有诸如 TiDB,OB 之类的兼容性新数据库分羹。那么,到底是谁起了主要作用呢?
数据库生态位竞争关系图
从定性分析的角度,PostgreSQL 是 MySQL 最大的竞争对手,在 DB-Engine 上排名前 20 的数据库中,唯有 PostgreSQL 保持正增长 (刨除两个大数据的),有能力吃下这块蛋糕。但具体 MySQL 用户流失到哪儿,还是要靠定量分析才有说服力:
如果我们将 StackOverflow 过去6年间,MySQL 流行度的下降值与 PostgreSQL 流行度的上升值画到一张 XY 散点图上,会发现两者具有极强的负相关性,相关系数 r = -0.96。特别是,如果我们将 MySQL 和 PgSQL 的流行度相加,几乎可以看到一条水平线,我们可以合理推断,这是由于此消彼长,MySQL 用户大量转移至 PostgreSQL 导致的。
MySQL 百花齐放?
作者认为 MySQL 流行度下降是因为百花齐放导致的。
MySQL 跟其他数据库比较的时候也许可以提一嘴这个事,唯独和 PostgreSQL 不行。在百花齐放,生态繁荣这一项上,没有数据库可以比得过 PostgreSQL。在 Database of Database 排行榜中,PostgreSQL 有着最多的协议兼容数据库,最多的衍生数据库产品,甚至在“嵌入”使用中也能排名第四。
无论是全球的数据库谱系图,还是中国国产数据库谱系图,PostgreSQL 的生态都要比 MySQL 繁荣的太多太多。
全球 RDBMS 谱系图
全球 RDBMS 谱系图 + 国产数据库 (by 云和恩墨)
国产数据库生态谱系 by 白鳝
在中国市场,如果把基于 PostgreSQL 的 “国产数据库” 算上,恐怕 MySQL 更是要吃不了兜着走。
PostgreSQL 营收是 MySQL 0.1% ?
作者认为,在中国公有云数据库市场中 PG 的营收仅有 MySQL 的 0.1% ~ 0.3% ,我对这个数据提出质疑。
根据 AWS RDS 团队给出的数据,他们全球 PostgreSQL 与 MySQL 的实例数量目前是 1:1 ,考虑到 MySQL 小型实例偏多,PostgreSQL 在营收上还占优势。中国公有云行业可以参考标杆阿里云 RDS 团队的数据:PostgreSQL 与MySQL的营收比例约为 1:5 ,基本与Google中国地区指数与百度指数相吻合。关于公有云 RDS PostgreSQL vs MySQL 的份额并没有公开披露,都属于内部数据,但欢迎大家向相关团队求证。
原作者在腾讯数据库团队任过职,可能会有关于腾讯云数据库的内部信息。因此,如果他给出一个 10:1 ~ 3:1 之的数据,我可能会采信。但 1000:1 和 1000:3 的营收比例数字显然是荒谬的。当然我们并不排除这种可能性:某家云厂商实在是不懂 PostgreSQL 以至于做的 RDS 太烂根本卖不动。
大型互联网/科技公司使用 PostgreSQL 或衍生发行版承载核心业务实在是太多了。例如我所任职的阿里,探探,苹果。其他知名企业包括:去哪儿网,平安银行,邮储银行,12306,Momenta,高德,菜鸟,丰田,NEC…… 等等等等,我所服务接触的航天/部队/警务/水利/国土/气象等与地理信息密切相关的行业中,更是 PostgreSQL 的基本盘。
BSD是流氓协议??
作者最后对 BSD 协议开炮,认为 BSD 协议是流氓协议,而且 “本质上 PG 也 是由美国公司控制的开源数据库”。
这里存在一些基本的事实错误,例如, PostgreSQL 使用的并非是 BSD 协议,而是专门的 PostgreSQL 协议,只是 BSD-like 而不是 BSD,这是其一。第二,作者恐怕是对开源协议有什么误解:BSD 协议仍需要尊重代码作者的著作权,需要包含版权声明 —— 我不知道是什么样的环境让作者形成了这种认知。
不同于 MySQL,由 Oracle 所控制拥有;PostgreSQL 是社区驱动的开源项目,并没有一个商业公司控制,也并没有哪一个国家控制;而且它的全球总部在加拿大不在美国,即使是来自被制裁的俄罗斯公司 Postgres Pro ,也依然活跃在 PG 社区中。作者的 这个 “也” 字以己度人,倒是非常好地指出了 MySQL 确实是由美国公司(还是一家领头参与制裁,带有显著敌意的公司)所控制的开源数据库,而这一点对于信创国产化的中国市场来说是致命的。
Fin
原作者的这篇情绪文本不值一驳,充满着事实错误,诡辩话术,情绪输出与人身攻击,作为 MySQL 社区的头脸人物代表,可谓是体面尽失,与之对擂实属掉份。
但正如人们说的:“你不应该把世界让给那些你讨厌的人”。所以我还是选择撰此文回应,用实打实的事实与数据说话来正本清源,匡扶正义,为 PostgreSQL 正名。
至于孰对孰错,那就交由读者评说啦。
参考阅读
References
[1]
: MySQL 和 PostgreSQL,谁是世界第一?
[3]
: 分布式数据库是伪需求
[4]
: 拿绿卡
[5]
: 履历
[6]
: Pigsty
[7]
: PostgreSQL 生态项目
[8]
: PostgreSQL 数据库发行版
[9]
: 设计数据密集型应用
[10]
: PostgreSQL指南:内幕探索
[11]
: Github Star Ranking
[12]
: TPC-C 打榜
[13]
: 几个亿
[14]
: 分布式数据库是伪需求吗?
[15]
: 为什么说PostgreSQL前途无量?
[16]
: 并发异常那些事
[17]
: Public Demo
[18]
: Github Repo: dbrank
[19]
: PostgreSQL:世界上最成功的数据库
[20]
: 国别用户画像
[21]
: 百度热搜
[22]
: 估算校正
[23]
: Developer Profile
[24]
: 学生的比例
[25]
: 初学者
[26]
: Worked with & want to work
[27]
: DB-Engine
[28]
: 时间拉长到最大的 2004 年至今来看一看
[29]
: Yandex
[30]
: 百度指数
[31]
: 柱状图
[32]
: Database of Database 排行榜
[33]
: 全球的数据库谱系图
[34]
: 直播预告:MySQL vs PostgreSQL
[35]
: 向量是PG中新的JSON
[36]
: PostgreSQL:世界上最成功的数据库
[37]
: PostgreSQL 到底有多强?
[38]
: 为什么PostgreSQL是最成功的数据库?
[39]
: StackOverflow 2022数据库年度调查
[40]
: Why PostgreSQL Rocks!
[41]
: 为什么说PostgreSQL前途无量?
[42]
: PostgreSQL 好处都有啥?
[43]
: 更好的开源RDS替代:Pigsty
[44]
: StackOverflow 7年调研数据跟踪
[45]
: PostgreSQL 社区状态调查报告 2022