参加 2023 年雅典 Percona 大学
我们已经有一段时间没有发布关于社区组织的活动了。我很高兴有机会分享我参加雅典 Percona 大学 的经历。
赶时间的朋友,主要议题如下:
1. 云数据库,为何考虑供应商锁定很重要。
2. 如何构建开源数据库,FerretDB 和 TiDB,两种完全不同的方法。
3. 从 MySQL 5.7 升级,监控以及利用 AI 加速进程。

见到熟悉的面孔,讨论数据库经验
在 MariaDB 基金会工作时,获取关于哪些有效、哪些无效的反馈并不总是容易的。很容易被局限在自己的 SQL 象牙塔里,而不考虑行业发生了怎样的变化。使用数据库编写应用程序有许多不同的方法。
Percona 的创始人 Peter Zaitsev 对此有一个非常务实的看法。他没有推荐某一项特定技术(无论是 MySQL、Percona、MariaDB 还是 Postgres),而是主张赋予开发者使用他们更熟悉的技术的能力,同时帮助他们使用所选择的数据库实现最佳性能。
FerretDB(一个 NoSQL 解决方案)的 CEO Peter Farkas 被问到:NoSQL 和 SQL 哪个更好?答案是:“我们根本就不应该讨论这个问题!NoSQL 和 SQL 正在缓慢融合。” 传统数据库正在增加 NoSQL 功能,仅仅是因为文档存储的重要性显而易见。NoSQL 数据库已经开始认识到事务以及关系型数据库提供的所有保证的重要性。因此,NoSQL 解决方案也在解决这些问题。
实际上,FerretDB 在这方面方向是正确的,但稍后会详细介绍。
世界正在走向云端,数据库需要适应这种转变

显而易见的是,现在大多数应用程序都是为云环境编写的。而对于云原生应用程序,你需要一个云原生数据库。但是由云供应商提供数据库的真正成本是什么?
Peter Zaitsev 在他的开场演讲中探讨了这个问题:“农奴云 vs 自由云:为什么开源将在云时代获胜”。诀窍在于找到你应该实际使用云的哪些功能。一旦你深入使用云专有解决方案,你实际上就被锁定在该提供商那里了。另一个需要注意的方面是,你的数据越多,将其迁移到任何其他平台就越困难。Peter 使用了一个很好的比喻:“数据具有引力,它越大,拉力就越强”。
一个开源的 MongoDB 替代方案
听了 Peter Farkas 关于 FerretDB 的演讲,真是大开眼界。我不会涉及太多技术细节,但 Peter 发现的东西对于开源来说真的非常重要:兼容性和互操作性!让我来解释一下
显然,MongoDB 不再是开源产品,但世界需要一个开源的 NoSQL 解决方案。更重要的是,开发者正在使用 MongoDB 的查询 API,它实际上……相当不错。你不能简单地开始重写所有应用程序来使用不同的 NoSQL 数据库,这太昂贵了,而这正是导致“供应商锁定”的原因。
所以 FerretDB 通过提供与 MongoDB 连接器兼容的 API 来解决这个锁定问题。应用程序可以针对 FerretDB 运行查询,并且认为它们是针对 MongoDB 运行的。这太棒了!顺便说一句,这也正是 MariaDB 的Oracle 模式 如此出色的原因。为 Oracle 编写的应用程序在 MariaDB 上也能运行得很好。
现在 FerretDB 需要解决问题的另一部分是如何实际存储所有这些数据?从零开始编写一个数据库需要大量资源……这对于初创公司来说是不可行的。那么为什么不利用现有的解决方案呢?没错!传统的关系型数据库在存储和检索数据方面做得相当不错。所以 FerretDB 实际上是 NoSQL 领域和 SQL 领域之间的适配器。最重要的是,SQL 后端并非一成不变!是的,目前 FerretDB 的数据库后端是 Postgres,它也支持 Sqlite。但 Peter 对于支持 MariaDB 兼容的贡献持相当开放的态度,前提是有一些社区支持来编写代码。如果你正在阅读这篇博客并对此感兴趣,基金会也很高兴能将 MariaDB 支持加入其中!
TiDB,一个与 MariaDB 和 MySQL 兼容的分布式数据库
Mattias Johnson,一位在 MySQL 和 MariaDB 领域经验丰富的开发者,介绍了 TiDB 的概况。还记得我说过从零开始构建数据库需要大量精力吗?是的,TiDB 就是这样。一个从头开始构建的云原生、分布式数据库。但即便如此,他们也是站在巨人的肩膀上,利用了 RocksDB 的存储层。

请注意,MariaDB 也提供相同的 RocksDB 存储选项。
Mattias 对 TiDB 提出了一个非常务实的观点,展示了它的亮点——在多个节点上将读、写和存储扩展到数百 TB 的数据,但也指出了局限性——由于系统的分布式特性导致的网络往返延迟。
关于 TiDB 需要注意的一点是,它拥有将数据导入和导出 TiDB 的工具,支持许多不同的平台,无论是 Apache Kafka、Apache Spark 还是 MariaDB。我非常愿意与 TiDB 合作,确保用户能够将数据从 MariaDB 推送到 TiDB,并且在应用程序需要 MariaDB 的特定优势(例如极低延迟的查询)时,也能够将数据取出并在 MariaDB 中运行。
其他值得关注的演讲
Percona 大学的所有演讲都很有趣,但这些在我脑海中印象深刻
- MySQL 5.7 到达 EOL:如何升级到 MySQL 8
迁移到 MySQL 8 时存在很多挑战,因为添加了相当多的新功能。最重要的是,取决于你选择跳到哪个 MySQL 8 小版本,都会存在差异。尽管如此,如果这就是你想要实现的目标,Ananias Tsalouchidis 在列出可能的陷阱方面做得很好。
至于我的立场,我坚持 MariaDB 的方法,除非绝对必要,否则不引入不兼容性。从这个意义上说,MariaDB 10.11 LTS 比 MySQL 8 更兼容 MySQL 5.7。所以如果你正在寻找一个更容易的升级路径,考虑切换到 MariaDB。从 5.7 版本,我们甚至可以进行原地数据目录迁移! - Netdata 是一个很棒的开源监控工具,它利用 AI 来检测异常。有点像打了兴奋剂的 Zabbix,再加上 Grafana。这是一个相当酷的开源项目,我们至少会在我们的 mariadb.org 基础设施上试用一下。
结论
偶尔跳出我们的 MariaDB 舒适圈感觉很棒。看到不同的人如何解决类似的数据相关挑战令人耳目一新。我学到的教训有:
- 互操作性至关重要!如果用户在解决方案不够好时可以轻松迁移出去,他们就更有可能迁移到你的解决方案。本着开源的精神,我们需要关注“开放标准”,并尽可能编写兼容性的代码。
- 模块化架构非常重要。拥有插件系统可以鼓励外部贡献。如果存储层不易替换,FerretDB 就不会获得 Sqlite 支持。MariaDB 有存储引擎。将来,我很想看看 FerretDB 是否可以使用 MariaDB 作为后端。
- 有时,使用成熟的 API 是很有意义的。显然,MongoDB 在其 SDK 方面做得非常出色。这就是为什么我们在 MariaDB 中尝试将所有功能尽可能地接近 SQL 标准实现。
说了这么多,请记住 MariaDB 基金会将在 12 月举办一次类似的聚会!来德国加入我们吧,参加一个内容充实、技术性极强的 MariaDB 日!