Amazon 为 MariaDB Vector 做出贡献

MariaDB Vector 预览版最近发布,为 MariaDB Server 带来了备受期待的向量搜索功能。Amazon 是 MariaDB Vector 的主要开源贡献者之一。为了分享这份喜悦并深入了解为 MariaDB Server 做出贡献的体验,我与 Amazon RDS 团队的软件工程师 Hugo Wen 进行了交流。 

Hugo 对 MariaDB Vector 的贡献

Hugo Wen 在 MariaDB 和 MySQL 中关于向量相似度搜索的工作始于 Amazon 的领导层认为向量搜索功能是一个关键补充,并决定投入 Amazon RDS 团队的时间为 MariaDB Vector 做出贡献。目标不仅是为 Amazon RDS 产品增加一项功能,更是为了创建一个社区贡献,供任何人使用和改进。

为什么要在关系型数据库中添加向量? Hugo 指出,目前已经有专门为向量设计的数据库,但这会导致数据库架构增加额外的层,并增加服务的总体成本。在关系型数据库内部支持向量将减少复杂性并简化维护,从而提高成本效益。使用 MariaDB Server,用户可以在同一数据库的两个表中同时拥有数据和向量,并通过一个查询访问它们。

设计阶段,Hugo 查看了不同的现有实现。Postgres 的 pgvector 是一个很好的例子,它是完全开源的。Hugo 还研究了 MySQL,但其实现隐藏在 Heatwave 后端服务中,仅供企业用户使用。MySQL 此后发布了 Vectors 数据类型,但仍然不包含向量最关键的方面:基于距离计算函数的索引和搜索。

Amazon 团队与 MariaDB 开发人员(包括 MariaDB plc 首席架构师 Sergei Golubchik 和 MariaDB 基金会的 Vicentiu Ciorbaru)之间关于设计和实现的讨论开启了合作。

在开发阶段,Hugo 提交了多个拉取请求 (Pull Requests),涉及算法本身的实现、图存储以及性能基准测试。

让我们从反方向开始。

性能基准测试在整个开发过程中都很重要,以便查看任何更改如何影响 MariaDB Vector 的性能。ANN-Benchmarks 是一个用于比较算法的第三方工具,Hugo 很早就将其应用于 MariaDB。ANN-benchmark 工具的结果被用于 Sergei 的博客《MariaDB Vector 有多快》,该博客显示 MariaDB 取得了不错的成绩——对于第一个预览版来说,这个结果令人惊喜。Hugo 的拉取请求 #3094 仍被标记为草稿,因为 Hugo 计划为 MariaDB Vector 的最终版本更新该工具。

良好的性能结果得益于对 MariaDB Vectors 的优化,Hugo 也对此做出了贡献。最初的 HNSW 索引存储的是连接而不是节点和邻居列表,如果一个节点有很多邻居,这会变得很慢。Hugo 建议只存储节点和邻居列表,这显著提高了性能:“与之前的方法相比,插入速度快了 5 倍,搜索速度提高了 23%,存储空间减少了 73%,这是基于使用 random-xs-20-euclidean 和 random-s-100-euclidean 数据集进行的 ann-benchmark 测试得出的结果。” 此后,通过拉取请求 #3197,又增加了更多的性能改进。

既然 MariaDB Vectors 的基本索引和搜索功能已经到位,正在考虑添加更多功能。对于预览版,Hugo 还贡献了向量删除和更新(PR #3321)以及各种错误修复。

预览版现已发布,Hugo 对例如 MariaDB Vector 的数据类型等方面的反馈很感兴趣。目前正在讨论是保留当前的二进制数据类型,还是更改为使用新的向量数据类型。

Hugo 评论说,人们似乎也非常关心针对特定数据量和向量维度进行索引和搜索的性能指标。结果自然很大程度上取决于实例类型和数据。一个选择是让用户可以轻松使用 ANN-benchmarking 工具自行生成指标。

如果您对 MariaDB Vector 有任何反馈,请发送至公共 MariaDB 讨论邮件列表:mariadb.com/kb/en/mailing-lists。对于私人反馈,请发送电子邮件至 foundation@mariadb.org。如果您更喜欢聊天,可以在 mariadb.zulipchat.com 找到我们。

Hugo 的 Amazon 贡献

MariaDB Vectors 并非 Hugo Wen 或 Amazon 对 MariaDB 的首次贡献。作为最大的云提供商之一,Amazon 不仅为了 Amazon Web Services 的利益改进 MariaDB,还积极将修复和改进分享给任何运行 MariaDB 的用户。

Amazon 的贡献并未被社区忽视:“很高兴看到云提供商成为 #MariaDB 的主要贡献者。对我来说,这是一个有趣的论据,反驳了云提供商只取不回馈开源社区的说法。” Jean-François Gagné 在 X 上说

Hugo 还贡献了以下其他案例:

  • MDEV-33479,一项与安全性相关的改进,针对 MariaDB 身份验证插件 – Unix-socket,将在 MariaDB 11.6 中发布
  • MDEV-27342,一项错误修复,与使用系统快照确保数据在崩溃后可恢复相关。已合并到 MariaDB 10.6 的一个次要版本中。
  • MDEV-31151,一项错误修复,针对迁移到 ARM 服务后在非常重的工作负载下长时间运行后发生的崩溃。该修复与 pinbox allocator 相关。

Hugo 评论说,Sergei Golubchik(MariaDB plc 首席架构师)总是对他的贡献给予非常快速的回应。最终合并所需的时间各不相同,但他的建议都得到了认真对待和 MariaDB 工程师的讨论,以确保对 MariaDB 是最优的。

展望未来

Hugo 对能为 MariaDB 开源生态系统做出贡献感到非常自豪,并期待继续合作,以提供更多出色的功能和错误修复。

MariaDB 基金会感谢 Hugo 和 Amazon 做出的贡献!