在这位工程师看来,PostgreSQL 才是开源 RDBMS 的更好选择。
数据库工程师在离职的时候会干些什么?拿张贺卡、收起纪念礼品,没准还有一瓶践行酒——但今天故事的主角还发了个帖子,对自己研究了五年的技术好好发泄了一番。
Oracle 前首席软件工程师兼 MySQL 优化器团队成员 Steinar Gunderson 在帖子中表示自己离职的原因比较复杂,但想在这里聊几句“憋了五年的真心话”——“MySQL 是款超烂的数据库,强烈建议大家认真考虑转用 PostgreSQL。”
# 看看 MySQL 之外的广阔世界
这位如今已经身在谷歌 Chrome 团队的工程师表示:“使用 MySQL 就像走进了一个平行宇宙,这里有很多人都由内而外笃信着 MySQL 就是最先进的数据库产品。但我不行,我的工作经常需要向观众们讲解优化器的内部工作原理,所以我特别能感受到 MySQL 的种种设计是多么原始。”
Gunderson 直言 MySQL 的代码仍有“很大的改进空间”,“公司管理层也一直支持大规模重构”。他进一步吐槽到:“真正让我不爽的是那些坚持认为 MySQL 一切良好的家伙(好像大多数 MySQL 用户和开发者根本没怎么用过其他数据库)。甚至连 executor 这种令人爆炸的东西——整个一大坨、各种组件功能彼此缠杂在一起——都能被称为‘高效’(事实正好相反)。”
尽管如此,Gunderson 依然对自己在 MySQL 项目中的贡献感到自豪,他表示自己参与的 MySQL 8.0 版本确实“比 5.7 版本好得多”,而且仍在持续改进,但“我们能做的也只有这些了”。
“我和同事们一直努力让 MySQL 优化器能够达到 2000 年初的标准设计水平,还做出了不少很好的调整,但也就是这样了。”
“最终,我们发现无论是强大的人才储备还是 Oracle 决胜云端的雄心,都不足以为 MySQL 争取到充足的重构资源、自然无法让它成为真正具有市场竞争力的产品。”但 Gunderson 也表示不想把 MySQL 贬得一无是处,如果有人正在用 MySQL 而且感觉不错的话可以继续。他只是希望大家“能在闲暇的时候偶尔出圈走走,看看 MySQL 之外的广阔世界”。
# MariaDB 也好不到哪里去?
MySQL 的创造者是 David Axmark 与 Michael Widenius,最初版本可以追溯到 1995 年。而其母公司、瑞典初创企业 MySQL AB 于 2008 年被 Sun Microsystems 收购,Sun 本身又在一年之后被甲骨文招至麾下。
在收购完成之后,Michael Widenius 从 Sun 离职,对 MySQL 进行了分叉,于是有了 MariaDB,同时他另外组建了一支 MySQL 开发团队。在此之后,MariaDB 就以托管服务 DBaaS 的形式持续发布着自己的 MySQL 迭代版本。
不过 Gunderson 对 MariaDB 也没什么好话。“别觉得 MariaDB 就比 MySQL 好多少。Widenius 和他的团队是因为不满于新的治理模式才离开的,而不是因为他们突然醒悟过来、发现自己在代码里埋下了多少混乱和隐患。”
例如,因为没有模块化设计,分类器需要识别输入内容来自表扫描还是范围扫描。而任何不属于这两种类别的输入(包括 joins)都需要经过重大调整。所以如果不重写查询,根本无法在现有设计中执行 full outer joins(直到现在 MySQL 也仍然不支持 outer joins,但至少团队已经意识到并承认这个问题的存在)。还有,“我甚至没法使用‘切片’系统,这简直是我在真实世界中见过的最离谱的状况。”
针对 Gunderson 的吐槽,MariaDB 联合创始人兼产品管理副总裁 Max Mether 向 TheRegister 回应称:“没有任何一款数据库是完美的。不同模型、存储引擎、方言、协议的激增都证明了这一点。”
Max Mether 还说道:“无论你怎么看,在 Oracle 下的 MySQL 一直没有‘掌舵人’,在内部几乎快被抛弃,之前还受到过超大规模的攻击,而这位工程师的帖子再次强化了我对 MySQL 发生这些事件的看法。”他指出,MariaDB 在 2016 年就完全放弃了之前的 MySQL 代码,并引入了新的存储引擎、方言、监视器,甚至是基于机器学习的工作负载分析。
# 无硝烟之争
MySQL 和 PostgreSQL 都是当前全球最受欢迎的数据库。Gunderson 并没有具体解释为什么同为开源关系数据库的 PostgreSQL 要比 MySQL 好得多,但他的观点确实得到了不少从业者的认同。
在不久前举办的 Postgres Build 2021 大会上,SIB Visions 公司 CEO Roland Hörmann 就专门探讨了如何从 Oralce 专有数据库迁移至 PostgreSQL 的议题。
Hörmann 的公司专门开发从 Oracle 到 Postgres 的迁移工具,他在采访中表示“每当有客户问他该为项目选择哪种数据库时,我的回答总是 Postgres;即使是在接触了 Oracle 二十年之后,我的答案也仍是如此。它开源、易于实现而且越来越好,没有理由不选择 Postgres。”
“大家总能在需要时获得支持;而且在建立数据库时,只需要配置一次 PostgreSQL conf 文件,它就能永远运行。就这么简单,虽然期间还是得设置备份之类的功能,但至少不用白白占用有经验的数据库管理员们太多宝贵的时间。”
但换个角度看,这其实不是什么“二选一”抉择题。Uber 曾从 MySQL 转到 PostgreSQL ,最后又从 PostgreSQL 转到 MySQL,网上也是总是有不少关于 MySQL 对比 PostgreSQL 的争论。作为两大主流开源数据库,MySQL 和 PostgreSQL 的 “战争” 从未停止。
前 Airbnb 技术经理、计算机博士朱赟在极客时间专栏中曾对此发表看法,类似 Uber 两次高调转型的事情,在她曾经工作过的 Square 公司也发生过。Square 最早使用的是 MySQL,到了 2012 年,由于 PostgreSQL 的各种优势越来越突出——比如对地理空间(Geospatial)数据和搜索的支持,当时几位资深工程师也开始大力倡导,很多新的服务就尝试性地使用 PostgreSQL。
在她来看,两者各有特点,有些技术实现在 MySQL 里更方便一点,另一些则反之。无论哪种数据存储方式,总有方案可以解决问题,并没有觉得非要哪一种才行。
因此,她认为两者各有各的优势和使用场景,并不存在一种数据库对另一种压倒性优势的说法。“对于大部分程序员来说,公司用哪个数据库,基本无需你去决定。
加入一个公司的时候,除非是创业公司,或者你是 CTO、VP、总监级别的,否则大部分的技术选型早已应该尘埃落定。尤其是数据库,一旦选择,再迁移的代价非常大。因此,除非有颠覆性的优势或者难以克服的问题,很少有公司会去费时费力做这种大的迁移。”
朱赟还表示,不论是技术选型还是技术转型,其中不可忽略的因素是:你的工程师更容易驾驭哪一种技术,或者有话语权的决策者们倾向于哪一种技术。
这一点其实和程序语言的选型有异曲同工之处。“一个公司如果数据库从来不出问题,那一定是因为没有业务量或者流量。所有技术的选型和设计,都有它的应用场景,除去那些让人开心的案例,剩下的毫无疑问就是坑。如何尽可能地避开这些坑,如何在出现问题的时候可以用最快的速度去修复,这些都是至关重要的因素。”