国产数据库的发展中,毫无疑问,通过借鉴先行者的经验,我们可以获得一定的后发优势。经过四十年的探索,国产数据库形成了三大源头:购买闭源代码吸收,依托开源代码迭代,自主研发从头开始。而在开源产品的基础上迭代,又以 MySQL 和 PostgreSQL 居多,那么到底这两条技术路线哪一条更值得长期投入和用户选择呢? 重要通告:受疫情影响,2021 数据技术嘉年华 改为线上举行,免费注册,欢迎大家参加第一次在“元宇宙中举行的数据技术嘉年华”。关于 MySQL 和 PostgreSQL 孰强孰弱的话题,在社区中,两边的拥护者早已火药味十足的论争不休。但是最近(12月5日),Oracle 前首席软件工程师、MySQL 优化器团队成员,Steinar Gunderson从 MySQL 团队离职时,则是向 MySQL 开了一炮,并实名点赞 PostgreSQL,引发了业内剧烈的碰撞讨论。“MySQL 是款超烂的数据库,强烈建议大家认真考虑转用 PostgreSQL。 MySQL is a pretty poor database, and you should strongly consider using Postgres instead.使用 MySQL 就像走进了一个平行宇宙,这里有很多人都由内而外笃信着 MySQL 就是最先进的数据库产品。但我不行,我的工作经常需要向观众们讲解优化器的内部工作原理,所以我特别能感受到 MySQL 的种种设计是多么原始。 无论你怎么看,在 Oracle 下的 MySQL 一直没有'掌舵人’,在内部几乎快被抛弃。 一款缺少掌舵人的数据库,很难被认为是”有灵魂“的。
更令人震惊的是那些坚持认为一切都很好的人(似乎大多数MySQL用户和开发人员并没有真正使用其他数据库)。 这是我深有同感的一点,很多人都旗帜鲜明的声称,某某数据库是宇宙中最好的数据库,但是他们甚至对其他数据库一无所知或满怀偏见。
当然 Steinar 表达的仅仅是一个人的观点,但是可以帮助我们窥豹一斑。对于用户数据库的选择,我的主张,一定是应该客观的,从自身实际场景和需要出发,选择适合应用的、适合自身能力的产品,扬长避短。国产数据库和 MySQL、PostgreSQL 的渊源 毫无疑问,MySQL仍然是当下全球最流行的开源数据库,自2009年Oracle通过收购SUN获取了 MySQL之后,就独拥全球最强大的两款数据库:商用的 Oracle、开源的 MySQL 。紧随 MySQL 的开源数据库,正是 PostgreSQL,而且其增长趋势迅猛 。 在2021年6月,Oracle官方在公众号发布了一篇文章,题目是:《GPL协议保障MySQL的自由免费开放》。这篇文章中指出:GPL协议保障MySQL持续开源,满足信创自主安全可控目标,相较于其他数据库,在稳定可靠,持续创新,拥抱开放方面,有着独特的价值优势,充分利用自由开源软件,实现我国信息化产业的独立自主目标。目前在我国信创名单中的数据库厂家中,有多家数据库产品均和原生MySQL兼容。 openEuler是一款开源操作系统,内核源于Linux…基于Linux遵循GPL开源许可的“传染性”,openEuler以及其商业发行版同样遵循GPL开源协议。普华基础软件、麒麟软件、中科院软件所、拓林思等越来越多的操作系统厂商发布了基于openEuler的商业发行版。 这篇文章传达的用意非常明确,探讨了操作系统的 GPL 协议遵从,那么数据库呢? 事实上,有更多的国产数据库和 PostgreSQL 相关。在下图中,我们描绘了 PostgreSQL的产品图谱,不仅国内,在国外也有很多产品和 PG 共有源头,而这个源头上最早就有华人的身影,王佑曾先生和 Michael Stonebraker教授共同创立了 Ingres,而Ingres正是一系列赫赫有名数据库的源头。为什么这么多国产数据库可以依托开源的 PostgreSQL 来构建呢?这就是开源协议的影响。既然要在开源的基础上构建数据库产品,那么自然要遵循开源的许可协议,也就必然要充分了解这些协议的区别。现在行业上已经建立起共识:数据库开源是未来的趋势。越来越多的国产数据库走向开源,这包括 华为的 openGauss、阿里云的 PolarDB、奥星贝斯的 OceanBase、PingCAP的 TiDB、腾讯的 TDSQL (其中的 TDSQL-A开源) 等。BSD是"Berkeley Software Distribution"的缩写,最早源自1971年加州大学伯克利分校。BSD开源协议给予使用者很大的自由,基本上使用者可以"随心所欲,为所欲为",包括自由的使用,修改源代码,也可以将修改后的代码作为开源或者闭源软件再发布。PostgreSQL 是根据 PostgreSQL许可证 发布的,这是一个自由的开源许可证,类似于BSD许可证。PostgreSQL数据库管理系统的协议说明:在此允许为任何目的使用、复制、修改和分发本软件及其文档,无需付费,也无需书面协议,但上述版权声明和本段及以下两段应出现在所有副本中。在任何情况下,加利福尼亚大学都不对任何一方因使用本软件及其文件而造成的直接、间接、特殊、偶然或间接的损害负责,包括利润损失,即使加利福尼亚大学已被告知这种损害的可能性。加利福尼亚大学特别声明不提供任何保证,包括但不限于适销性和适用于特定目的的隐含保证。此处提供的软件是以 "现状 "为基础,加利福尼亚大学没有义务提供维护、支持、更新、增强或修改。 GPL 全称是 GNU General Public License协议,其核心是只要在一个软件中使用(“使用”包括对类库引用,修改后的代码以及衍生代码)GPL协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的GPL协议“传染性”。对于使用GPL协议的开源代码,商业软件或者开发人员对代码进行集成以及作为类库进行二次开发,在进行再发布的时候需要伴随GPL协议。GPL 有两个属性广受关注,那就是:可修改 和 可盈利。 1. 可自由修改 如果你想添加或删除某个功能 或者 在别的项目中使用部分代码,没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。 2. 可用来盈利 你可以在分发软件的时候收费,但必须在收费前,向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。开源协议众多,下图对不同开源协议做了一个很好的展开说明: 2019年,中国开源云联盟官网上线了“木兰宽松许可证”(MulanPSL),这是中国首个由官方推出的开源协议,现在更新到 第二版,随后推出的是木兰公共许可证。openGauss 以 MulanPSL2 宽松许可证开源;OceanBase 以 MulanPubL2 公共许可证开源。宽松许可证较 BSD 协议更自由、更宽松,其关键条款为:每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。 开源本质上也是一种商业模式,自由分发只是其手段之一,不同时期形成的不同开源协议,以不同方式成就了开源世界,最终形成了今天开源软件的格局。我在前文曾经论述,首先我们必须承认中国的数据库产品研发,较西方起步晚了20余年,我们必须要正视这个差距,此外,发展中的国产数据库也必将走向全球。基于这两个论据,我们可以得出以下共识。1. 借鉴成功经验,站在前人的肩膀上谋发展 - 这也是围绕开源数据库和成熟理论基础建设国产数据库的一个缘由;2. 树立全球视野,国产数据库参与国际竞争 - 这就要求我们需要遵循通用的国际和行业准则方能参与全球发展;3. 保持开源开放,树立技术自信和科技自强 - 不敝帚自珍不妄自菲薄以开源开放之心开创数据库产业中国时刻。根据数据库流行度趋势,从全球看,自2021年1月开始,开源数据库已经超越了商业数据库,这一趋势不可逆转。所以通过开源进行协作,并通过快速的用户反馈迭代产品,已经成为产品成长的快速通道。选择 MySQL 还是 PostgreSQL 路线? 无论是基于 MySQL 还是基于 PostgreSQL 来进行迭代演进,都是站在前人积累的肩上,了解了这一事实,也就能够清楚事物的本质。《坛经》有云:“时有风吹幡动。一僧曰风动,一僧曰幡动。议论不已。惠能进曰:'非风动,非幡动,仁者心动。’”而今开源路线的选择,MySQL 可,PostgreSQL 亦可,然而核心在于自主可控。只要掌握了核心能力,能够走上快速发展创新超越之路,就是正确之路。遵循基本的开源许可证原则,那么 MySQL 还是 PostgreSQL 作为起点,也就非常清晰了:1. 如果选择一个开源产品,进行闭源商业化,那么请选择 PostgreSQL; 2. 如果选择一个开源产品,开源迭代,那么 MySQL 和 PostgreSQL 都可以。这也是为什么有很多商业数据库是基于 PostgreSQL 开发的根本原因,国内外基于 PostgreSQL 所推出的产品都很多,但是受限于开源协议,基于 MySQL 的商业数据库就不多见。在 Database of Database 网站上还列出来数据库的血脉,以下列出的就都是基于 PostgreSQL 开发的产品:要想达成核心自主可控、发展创新超越的目标,就要在数据库内核代码上,尤其是核心组件代码上,实现吸收掌握、迭代创新。也唯有如此,才能有机会参与国际竞争。云和恩墨曾经绘制过 Oracle 数据库的核心模块和体系架构图,提取其中的关键、通用组件,可以用来衡量和量度自主研发数据库的核心能力差距和创新攻关方向:周傲英老师曾经分享过他对国产数据库的观点,其中硬核实力是关键之一:1.有成功的应用,有成体系的技术,再加上在这两者基础上抽象出来的概念和理论,方可称为“硬核”。2.从这个意义而言,数据库是典型的硬核科技。想要做硬核的事,从应用到技术再到理论是正道,反过来是捷径。应用、技术和理论三者联动才是创新之道。3.上世纪八、九十年代是数据库产业和学术大发展的时期,系统方面有Oracle、Db2这样的产品。理论方面完善了关系数据库、事务处理、基准评测试等。我们错过了这个时代,当然就无法实现数据库的全方位进步。 我非常赞同周老师的观点,既然是硬核科技就不能软着来。既然国产数据库要具备国际视野、参与国际竞争,就要努力在核心技术方面进行突破,既然已经走过了捷径,就应该回过头来苦练内功。在2021年国产数据库流行度排行榜上,积分规则上增加了 专利 和 论文 两个维度,就是希望通过更加”硬核“的指标,来量度数据库产品的内核能力,我们只有在基础研究、核心算法上不断突破进取,才有可能在在国际舞台上站稳身影。目前 openGauss / GaussDB、达梦、GBase 的专利数量名列前茅。有了专利、理论思考和积累,接下来就是技术突破,从开源出发,接下来就应该是吸收、创新、突破。有人说,中国真正懂数据库内核研发的人才不超过300人,也有人说,中国真正顶级的数据库人才不超过30人,不论是30、300还是3000人,我们都面临人才的极度短缺。唯一的方案就是:汇聚生态,共同突破,合则力强! 无论如何,一定要跳出低层次循环。PostgreSQL 之 openGauss 根生态 如果我们认同:进行核心的数据库创新,必须进行深度的内核研发,那么我们就必须争取早日具备这种能力。过去在 PostgreSQL 的生态上,大量国产厂商进行投入,开发了许多商用的闭源产品,这其中包括人大金仓、瀚高、优炫等。闭源的问题在于,分则力散,所有人都需要去重复建设包括外围工具、兼容性改造、高可用组件、运维组件等,有限的投入分散了,投入到内核上的力量就更少了。华为开源的 openGauss 为我们做出了一个良好的示范,通过开源几乎完全重写的企业级内核(保证了可控性),以 木兰宽松许可证(MulanPSL2) 开放,并且邀请大量的合作伙伴共同建设社区、开发新的特性(保证了众创),进而在前瞻性方向上形成突破。如果 openGauss 生态最终获得成功,那么就是典型的,合则力强。通过社区共建,基础功能全部开源,避免了不同的厂商的重复建设。今天云和恩墨、海量数据、神舟通用、虚谷伟业、柏睿数据、人大金仓、东华软件、亚信科技、沐融科技、深信服、优炫科技等数据库厂商都投入到了 openGauss 社区,共建开源生态。这是一种全新的方式,一定会有助于我们共同发展向前。例如,openGauss 完成了 XID 64位的改造,其他人就不必再头疼事务号回卷问题,又例如 openGauss 通过 Ustore 增加了Undo机制,解决了空间膨胀和收缩的 Vacuum 问题,再例如区块链表的实现追平了Oracle 21c在这一方向的创新。这就是众志和开源的力量。openGauss 以开源生态,让国产数据库在这一方向真正避免了低层次循环,例如,云和恩墨基于 openGauss 的 MogDB ,就可以大踏步的去探索更具前瞻性的技术创新,在高效压缩算法、内存融合技术等方向重点突破,而不必再一次从头开始。MogDB 也因此得以跻身《2021年中国信创生态研究报告》基础软件厂商成长象限。MySQL 之 openMySQL 根生态如何建设? 主流的 MySQL 的分支包括:Oracle官方版本 MySQL、Percona Server、MariaDB。其中 MariaDB 在 Oracle 收购 MySQL 之后,MySQL创始人Monty担忧 Oracle 开源策略的变化而创建的分支。MariaDB 高度兼容 MySQL,主要由开源社区维护,采用GPL授权许可。在国内数据库领域,同样有很多厂商在围绕着 MySQL 的生态进行扩展,这其中包括 PolarDB X、 TDSQL-C、GoldenDB、万里开源、热璞等产品。受限于 GPL 协议,如果在内核方面进行了修改,需要保持开源,这事实上对商业产品做出了约束,而如果不作内核方面的改写和改进,仅仅在外围做投入,显然又无法承载国产数据库产业发展的厚望。我曾经给一些国产 MySQL 领域的朋友提过建议:成立一个生态联盟,进行基于 MySQL 的开源根生态建设。也就是大家共同维护一个内核版本,进行满足 GPL 协议的开源开放,然后形成合力,这样,一套分库分表的分布式就能够满足大家的需求,而不是所有厂商重复建设。如此,也能够聚焦投入,加快发展。正如 MariaDB的联合创始人和产品管理副总裁 - Max Mether 回复本文开头那场论战时所说的:In 2016, at MariaDB, we completely abandoned MySQL code, and brought in new storage engines, dialects, monitors, even ML-based workload analysis. 2016年,在MariaDB,我们完全放弃了MySQL代码,并带来了新的存储引擎、方言、监控器,甚至基于ML的工作负载分析。 唯有真正掌握,自由发展,才有可能走上创新超越之路。借鉴前人的成功经验:GPL 和 BSD 协议是 MySQL 和 PostgreSQL 成长的保障:- MySQL 的 GPL 协议要求后续的强制开源,确保了开源生态的活跃性和广泛参与,最大程度的避免了社区的分裂,所有的智慧贡献得以全球共享。
- PostgreSQL 的 BSD 协议,孵化了大量商业数据库产品,催生了各种形态的数据库创新,培养了大量的 Pg 内核研发人才。
过去 GPL 协议成就了 MySQL,今天 BSD 协议则成就了 PostgreSQL。在互联网兴起的浪潮中,MySQL 以其轻、快、小等特性,赢得了互联网的机遇与青睐,获得了飞速发展;而今天,当企业级市场开始拥抱开源,则 PostgreSQL 的优化器、复杂查询支持、兼容性等获得了企业级用户的拥护。如果能将两者结合,也就是以 MySQL 生态模式发展 PostgreSQL,那将是最佳选择。而今天的 openGauss 的志向正在于此,通过 MulanPSL2 去实现开放性和商业化许可,又通过协同大量合作伙伴开源贡献社区实现类似 GPL 的合力。那么对于 MySQL 呢?如果能以 GPL 协议实现 MulanPSL2 的效果,则同样发展会更活跃。MySQL 还缺什么?如果有一个 openMySQL 作为国产 MySQL 生态的基础,保持开源开放,那么是不是一切就会更美好呢?正如 Monty 创建了 MariaDB 分支一样,中国的 MySQL 生态同样需要一个共同投入的独立分支,唯有如此,MySQL 技术路线才能破局突破。在上一篇文章我提到,今天的国产数据库建设,生态是最重要的。如果大家分头做开源,则很多项目最终都可能门可罗雀、无人问津,最终成为了为开源而开源,徒增了无数无谓的投入而已。开源的生态,唯有共建才可以持续。在同一方向上,共同汇聚客户的关注、共同解决用户的问题,才是今天的最优解。我们处于后发阶段,如果力量分散,很多国产的开源项目,最后都可能归于沉寂,乃至消亡。以终为始,中国的国产数据库也一定是世界的,那么回到当下我们要思考的就是,如何让中国数据库建立起符合世界标准的技术领先性。根据以上的论述,我们可以共同思考:在开源的基础上,遵从开源协议,树立中国标准和路线,汇聚力量打造国产数据库的根生态。如果能够共同构建数据库基础组件,共同进行前瞻技术领域的突破创新,进而在此之上发展合规的、多样化的商业数据库发行版,则中国的数据库产业必然可以跳出低层次循环、加速发展。- MySQL a 'pretty poor database’ says departing Oracle engineer
|