MySQL 如何赶上 PostgreSQL 的势头?

原文地址

我与 MySQL 社区的前辈交谈时,经常遇到这个问题:「为什么 MySQL 这么棒,而且(至少根据 DB-Engines 的计算)仍然比 PostgreSQL 更流行;但它的地位在下降,PostgreSQL 却势不可挡地越来越受欢迎?」MySQL 生态能做些什么来挽回局势吗?我们来探讨一下!

在这里插入图片描述

来看看为什么 PostgreSQL 发展如此强劲,而 MySQL 却在走下坡路。我认为这归结于所有权和治理、许可证、社区、架构和开源产品的发展势头。

所有权和治理

MySQL 从未像 PostgreSQL 那样受到「社区驱动」。然而,当 MySQL 由瑞典小公司 MySQL AB 和 BDFL(仁慈的终身独裁者 – Benevolent Dictator for Life,一个非正式称号,常用于幽默地称呼开源开发社区项目的发起人)Michael「Monty」Widenious 掌管时,它获得了很多社区的信任。更重要的是,它没有被大公司视为特别的威胁。

现在,情况不同了 – 甲骨文拥有 MySQL,业内许多大公司,尤其云计算厂商,都将其视为对手。当然没有理由为对手贡献代码和营销,创造价值。此外,对于 MySQL,拥有 MySQL 商标的甲骨文公司总是有额外的优先权。

相比之下,PostgreSQL 由社区运行、其所有供应商都立足于一个商业前提:比起 PostgreSQL 生态中的小公司,EDB 这样的公司没有优先权。

这意味着大公司更愿意推荐 PostgreSQL 作为首选,因为这不会为它们的竞争对手创造价值,而且它们对 PostgreSQL 项目的方向有更大的影响力;而数以百计的小公司则通过本地「草根」社区的开发者和市场营销努力,使 PostgreSQL 在全球无处不在。

MySQL 社区能做什么?

社区能做的不多 – 完全取决于甲骨文公司。我在《甲骨文能拯救 MySQL 吗》中也写到,给 MySQL 一个中立的基础(如跟 Linux 或 Kubernetes 合作),它才有和 PostgreSQL 竞争的机会。我并不乐观,因为我认为,甲骨文目前更感兴趣的是「硬」货币化(译者注:直接通过现有的产品和服务产生营收),而不是增加用户量。

许可

MySQL 拥有双重许可 – GPLv2 和可以从甲骨文购买到的商业许可;而 PostgreSQL 只有宽松的 PostgreSQL 许可。

事实上,这意味着很容易创建有商业许可的 PostgreSQL 衍生分支,或将其嵌入获得商业许可的项目中,不需要任何「变通方式」。当然,开发此类产品的人也在支持和推广 PostgreSQL。
MySQL 确实允许云计算厂商创建自己的商业分支,与 MySQL 兼容的亚马逊 Aurora 就是最著名、最成功的此类分支,但在软件发行时却不允许。

MySQL 社区能做什么?

还是那句话,能做的不多 – 只有甲骨文公司能根据许可重新授权 MySQL,而我很难相信他们会减少对 MySQL 的控制,尽管采用「开放核心」和「仅限云」模式的软件,通常与采用宽松式许可「核心」的软件可以结合得很好(原文:even though「open core」and「cloud only」editions often play well with permissively licensed「core」software)。

社区

我认为,当我们考虑开源社区时,最好考虑三个而不是一个社区。

说到用户社区,MySQL 的表现仍然相当出色,尽管 PostgreSQL 越来越多地成为新应用程序的首选。不过,用户社区往往是其他社区工作的成果。

PostgreSQL 中,贡献者社区更强大,这是由许多组织推动的。我们举办了针对贡献者的活动,还编写了关于如何为 PostgreSQL 作出贡献的书籍。PostgreSQL 的扩展架构也有助于轻松扩展 PostgreSQL,并公开分享工作成果。

供应商社区 – 这才是主要问题,没那么多公司有兴趣推广 MySQL,因为这样只是在为甲骨文公司创造价值。 那么,这不会鼓励所有甲骨文「合作伙伴」去推广 MySQL 吗? 有可能,全球范围内也确实有一些由合作伙伴支持的 MySQL 活动,但这些无法与供应商对 PostgreSQL 的支持相提并论,因为PostgreSQL是「他们的项目」。

MySQL 社区能做什么?

这次我不会说社区已经无能为力。其他领域的现状使工作更困难,回报也更少,但社区仍然可以做很多事情。 如果你关心 MySQL 的未来,请组织并参与各种活动,尤其是在 MySQL 社区之外。你可以写文章、录视频、写书,在社交媒体上推广,并将它们提交给 Hacker News。

尤其不要错过 FOSDEM 2025 MySQL Devroom 的征集活动!

甲骨文公司也可以在不减少盈利的情况下参与。与潜在贡献者接触 – 发起外部贡献者可以参与的活动,与他们分享计划,支持他们的贡献,至少在他们与 MySQL 社区蓝图相一致的情况下。

架构

一些 PostgreSQL 用户把 PostgreSQL 的发展势头归因于其更好的架构和更简洁的代码库。我认为这不是主要原因,但值得讨论。

PostgreSQL 的设计实现了大量功能强大的扩展,而 MySQL 只有有限的扩展可能性。最大的例外是存储引擎接口,MySQL 支持多种存储引擎,而 PostgreSQL 只支持一种(尽管 Neon 或 OrioleDB 这样的分支可以通过打补丁来改变)。

这种可扩展性使 PostgreSQL 易于创新(尤其在拥有更强大的贡献者社区的情况下),且无需纳入核心代码。

MySQL 社区能做什么?

即使 MySQL 的可扩展性有限,利用其已有的各种插件(https://dev.mysql.com/doc/extending-mysql/8.0/en/plugin-types.html)和组件(https://dev.mysql.com/doc/refman/8.4/en/components.html),也还是可以做很多事情的。

首先需要针对 MySQL 插件的社区市场,这将鼓励开发者构建更多插件,且容易关注。 我们还需要甲骨文的支持 – 承诺扩展 MySQL 插件架构,支持开发者构建插件,即使它们会与甲骨文的产品竞争。 例如,如果 MySQL 拥有创建自定义数据类型和可插拔索引的插件,也许就已经有用于 MySQL 的 PNG 向量替代方案。

开源产品的发展势头

选择数据库是一个长期的赌注,因为更换并不容易。问问那些几十年前选择甲骨文,现在又被它困住的人就知道了。这就意味着,选择数据库时需要考虑未来:不仅希望所选的数据库十年后还会存在,而且要考虑它是否会随着时间推移而发展,以满足未来的技术需求。

正如我在文章《甲骨文最终会杀死 MySQL 吗》(见 https://percona.com/blog/is-oracle-finally-killing-mysql/)中所写,甲骨文已将大量开发者的重心转移到专有和 Cloud-only MySQL 版本上,MySQL Community 几乎已废弃。MySQL 在今天许多应用中仍非常出色,但它的确落后了,MySQL 社区中许多人质疑它是否适合未来的发展。

MySQL 社区能做什么?

再次强调,MySQL 的发展主要取决于甲骨文公司,因为是他们一手推进了 MySQL 的官方路线。至于 Percona Server for MySQL?我们确实提供了甲骨文 MySQL 的领先开源替代方案,但必须注意所作的改变,以免破坏完全兼容性或使上游合并成本过高。MariaDB 则作出了不同的权衡;不受限制的创新使其与 MySQL 的兼容性越来越差,而且每个版本的差异也越来越大。

MariaDB

MariaDB 由 MariaDB 基金会管理,不是已经尽可能地解决了所有这些问题吗? 别急!我认为,MariaDB 是一个有缺陷的基金会,它并不拥有所有的知识产权,尤其是商标,无法为所有供应商提供公平的竞争环境。它仍然存在商标垄断问题,因为只有一家公司能提供 MariaDB 的所有东西。

不过,MariaDB 可能有机会;MariaDB(公司)刚被 K1 收购,管理和商标所有权有机会发生变化,更接近 PostgreSQL 的情况。只是私募股权公司不擅长减少对商标知识产权的控制,所以希望不大。

MariaDB 基金会可以将其更名为 SomethingElseDB,从而获得对该项目的完全商标控制权,但这意味着 MariaDB 将失去其所有的知名度;这种情况不太可能发生。

MariaDB 与 MySQL 也有很大区别,协调两者之间的差异需要多年的努力。但只要有足够的资源和社区意愿,这是可以解决的。

总结

如你所见,由于 MySQL 的所有权和管理方式,社区的活动受到了限制。长远来看,MySQL 社区与 PostgreSQL 竞争的唯一途径是所有重要的参与者联合起来(就像 Valkey(https://valkey.io)那样),在不同的品牌下创建一个 MySQL 替代方案 – 这可以解决上面提到的大多数问题。


💡 更多资讯,请关注 Bytebase 公号:Bytebase

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950134.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域

这是一个非常关键且容易混淆的概念 既然 this.globalData.appId appId 是将 appId 存储在内存中,为什么微信小程序中的 wx.getStorage 和 wx.setStorage(本地存储)中没有 appId,并且您提出了一个非常重要的疑问:stor…

c/c++ 里的进程间通信 , 管道 pipe 编程举例

&#xff08;1&#xff09;以下是一个网上的使用 pipe 编程的范例&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h>int main() {int pipefd…

java项目之网上租贸系统源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的网上租贸系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于Spring Boot的网上租贸…

数据库回滚:大祸临头时

原文地址 什么是数据库回滚&#xff1f; 数据库技术中&#xff0c;回滚是通过撤销对数据库所做的一项或多项更改&#xff0c;将数据库返回到先前状态的操作。它是维护数据完整性和从错误中恢复的重要机制。 什么时候需要数据库回滚&#xff1f; 数据库回滚在以下几个场景中很…

Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式

业务场景 在目前常见的中后台管理系统中&#xff0c;比较常见的是固定的布局方式包裹页面&#xff0c;但一些特殊页面&#xff0c;比如&#xff1a;登录页面、注册页面、忘记密码页面这些页面是不需要布局包裹的。 但在 Next.js AppRouter 中&#xff0c;必须包含一个根布局文…

【UE5 C++课程系列笔记】23——多线程基础——AsyncTask

目录 概念 函数说明 注意事项 &#xff08;1&#xff09;线程安全问题 &#xff08;2&#xff09;依赖特定线程执行的任务限制 &#xff08;3&#xff09;任务执行顺序和时间不确定性 使用示例 概念 AsyncTask 允许开发者将一个函数或者一段代码逻辑提交到特定的线程去执…

2025-01-04 Unity插件 YodaSheet1 —— 插件介绍

文章目录 1 介绍2 工作原理2.1 ScriptableObject -> YadeSheetData2.2 YadeDatabase 存储多个 YadeSheetData 3 用途4 缺点5 推荐 1 介绍 ​ Yade 提供类似于 Excel 或者 Google Sheets 的表格编辑器&#xff0c;可以轻松地在 Unity 编辑器中 编辑&#xff0c;搜索&#xf…

【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现

图像缩放技术在图像显示、传输、分析等多个领域中扮演着重要角色。随着数字图像处理技术的发展&#xff0c;对图像缩放质量的要求也越来越高。二阶牛顿插值因其在处理图像时能够较好地保持边缘特征和减少细节模糊&#xff0c;成为了图像缩放中的一个研究热点。 一、 二阶牛顿插…

C语言 扫雷程序设计

目录 1.main函数 2.菜单打印menu函数 3.游戏game函数 4.宏定义 5.界面初始化 6.打印界面 7.设置雷 8.统计排查坐标周围雷的个数 9.排查雷 10.总代码 test.c代码 game.h代码 game.c代码 结语&#xff1a; 一个简单的扫雷游戏&#xff0c;通过宏定义可以修改行列的…

如何有效搭建在线培训知识库

在当今快速发展的教育行业&#xff0c;知识的更新速度日益加快&#xff0c;教育机构和企业需要为学员提供持续的学习资源和培训支持。在线培训知识库的搭建成为实现这一目标的重要手段。一个有效的在线培训知识库不仅能够帮助学员系统地学习和掌握知识&#xff0c;还能为教师和…

Android Audio基础(54)——数字音频接口 I2S、PCM(TDM) 、PDM

1. 概述 本文介绍的数字音频接口全部是硬件接口,是实际的物理连线方式,即同一个PCB板上IC芯片和IC芯片之间的通讯协议。 PCM、PDM也可以用于表示音频编码格式,。编码格式是指模拟信号数字化的方式。 I2S和PCM(TDM)接口传输的数据是PCM格式的音频数据。这两种协议是最为常见…

STM32之CAN通讯(十一)

STM32F407 系列文章 - CAN通讯&#xff08;十一&#xff09; 目录 前言 一、CAN 二、CAN驱动电路 三、CAN软件设计 1.CAN状态初始化 2.头文件相关定义 3.接收中断服务函数 4.用户层使用 1.用户层相关定义 2.发送数据 3.接收数据 1.查询方式处理 2.中断方式处理 3…

第31天:Web开发-PHP应用TP框架MVC模型路由访问模版渲染安全写法版本漏洞

#知识点 1、安全开发-框架技术-ThinkPHP 2、安全开发-框架安全-版本&写法 3、安全开发-ThinkPHP-代码审计案例 类别 组件/框架 说明 [Web框架] Laravel 现代化、功能全面的框架&#xff0c;适合大多数Web应用。 Symfony 高度模块化、功能强大的框架&#xff0c;适…

量子计算遇上人工智能:突破算力瓶颈的关键?

引言&#xff1a;量子计算遇上人工智能——突破算力瓶颈的关键&#xff1f; 在数字化时代的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度改变着我们的生活&#xff0c;从语音助手到自动驾驶&#xff0c;从医学诊断到金融分析&#xff0c;无不彰显其…

英伟达 RTX 5090 显卡赋能医疗大模型:变革、挑战与展望

一、英伟达 RTX 5090 与 RTX 4090 技术参数对比 1.1 核心架构与制程工艺 在探讨英伟达 RTX 4090 与 RTX 5090 的差异时&#xff0c;核心架构与制程工艺无疑是最为关键的基础要素&#xff0c;它们从根本上决定了两款显卡的性能上限与应用潜力。 1.1.1 核心架构差异 RTX 4090…

Bash Shell的操作环境

目录 1、路径与指令搜寻顺序 2、bash的进站&#xff08;开机&#xff09;与欢迎信息&#xff1a;/etc/issue&#xff0c;/etc/motd &#xff08;1&#xff09;/etc/issue &#xff08;2&#xff09;/etc/motd 3、bash的环境配置文件 &#xff08;1&#xff09;login与non-…

homework 2025.01.07 math 6

1选择部分 二填空部分

(六)CAN总线通讯

文章目录 CAN总线回环测试第一种基于板载CAN测试第一步确认板载是否支持第二步关闭 CAN 接口将 CAN 接口置于非活动状态第三步 配置 CAN 接口第一步 设置 CAN 接口比特率第二步 设置 CAN 启用回环模式第三步 启用 CAN 接口 第四步 测试CAN总线回环捕获 CAN 消息发送 CAN 消息 第…

任务调度之Quartz(二):Quartz体系结构

1、Quartz 体系结构 由上一篇的Quartz基本使用可以发现&#xff0c;Quartz 主要包含一下几种角色&#xff1a; 1&#xff09;Job&#xff1a;也可以认为是JobDtetail&#xff0c;表示具体的调度任务 2&#xff09;Trigger&#xff1a;触发器&#xff0c;用于定义任务Job出发执行…

基于Springboot + vue实现的小型养老院管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…