宣布 DuckDB 1.0.0

Mark Raasveldt 和 Hannes Mühleisen
2024-06-03 · 7 分钟

TL;DR: DuckDB 团队非常高兴地宣布,今天我们发布了 DuckDB 1.0.0 版本,代号“雪鸭”(anas nivis)。

要安装新版本,请访问安装指南。有关发布说明,请参阅发布页面

Logos of DuckDB releases

自 2018 年该项目首次编写源代码以来,已将近六年,期间发生了很多事情:现在有超过 30 万行 C++ 引擎代码,超过 4.2 万次提交,以及近 4 千个问题被提出并解决。DuckDB 也获得了显著的人气:该项目在 GitHub 和社交媒体平台上吸引了数万颗星和关注者。每月下载量达数百万次,仅扩展的下载流量就达到每天四太字节以上。甚至有关于 DuckDB 的书籍正在编写中,而且——最重要的是——现在连维基百科也认为 DuckDB 值得关注,尽管只是勉强。

为何选在现在?

当然,版本号在某种程度上是随意和“感性”的,尽管有人试图让它们更具机械性。我们本可以在 2018 年发布 DuckDB 1.0.0,或者再等十年。永远没有一个完美的时刻,因为软件(除了TeX)永远不会“完成”。为何偏偏选择今天?

数据管理系统——即使是纯粹的分析系统——是任何应用程序的核心组件,因此开发者和用户之间始终存在一种隐性信任契约。用户依赖数据库提供正确的查询结果,并且不丢失他们的数据。与此同时,系统开发者需要意识到他们有责任避免随意破坏人们的应用程序。直观上,对于数据管理系统而言,1.0.0 版本意味着与计时器应用程序(无冒犯之意)不同的东西。从一开始,我们就致力于使 DuckDB 成为人们构建应用程序的可靠基础。这也是为什么 1.0.0 版本以虚构的雪鸭(anas nivis)命名,这可以追溯到多年前苹果的 Snow Leopard 版本。

对我们来说,发布 1.0.0 的主要障碍之一是存储格式。DuckDB 拥有自己的定制数据存储格式。这种格式允许用户在单个文件中管理许多(可能非常大)的表,并具有完整的事务语义和最先进的压缩。当然,设计新的文件格式并非没有挑战,我们不得不随着时间对格式进行重大更改。这导致了一个次优情况:每当发布新的 DuckDB 版本时,旧版本创建的文件无法与新 DuckDB 版本兼容,必须手动升级。这个问题已在 2 月份的 v0.10.0 中解决——我们引入了 DuckDB 存储格式的向后兼容性和有限的向前兼容性。这项功能已在实际应用中使用了 S一段时间,没有出现严重问题——这给了我们信心,可以保证使用 DuckDB 1.0.0 创建的 DuckDB 文件将与未来的 DuckDB 版本兼容。

稳定性

1.0.0 版本的核心主题是稳定性。这与之前那些博客文章中大谈特谈新功能的版本形成了对比。相反,1.0.0 版本的新功能非常有限(可能 潜入 一些)。相反,我们的重点一直放在稳定性上。

我们观察到 DuckDB 在实际应用中的数量和广度呈现惊人的增长,并且没有发现严重问题的报告有所增加。与此同时,每晚都有数千个测试用例运行着数百万个测试查询。我们运行大量的微基准测试和标准化基准测试套件,以发现性能退化。DuckDB 不断受到各种模糊测试器的“折磨”,这些测试器构造各种奇特的 SQL 查询,以确保我们不会遗漏奇怪的边缘情况。总而言之,这让我们对发布 1.0.0 建立了必要的信心。

1.0.0 版本稳定性的另一个核心方面是跨版本稳定性。虽然永远不破坏任何人的工作流程可能是不可能的,但我们计划在未来的面向用户的更改中更加谨慎。特别是,我们计划专注于为 SQL 方言和 C API 提供稳定性。虽然我们不保证将来永远不会改变这些层中的语义——但我们会尽量在这样做时提供充足的警告,并提供允许以前工作的代码继续工作的变通方法。

展望未来

与许多开源项目不同,DuckDB 还有一个健康的长期资金策略。DuckDB Labs 是雇佣 DuckDB 核心贡献者的公司,没有获得任何外部投资,因此,公司完全由团队拥有。Labs 的商业模式是为 DuckDB 提供咨询和支持服务,我们很高兴地报告这项业务进展顺利。凭借合同收入,我们资助了由近 20 人组成的团队进行长期和战略性的 DuckDB 开发。与此同时,该项目的知识产权由独立的DuckDB 基金会保护。这个非营利基金会确保 DuckDB 将在 MIT 许可下长期存在。

关于长期计划,路线图上当然还有很多事情。我们非常兴奋的一件事是扩展 DuckDB 周围的扩展环境的能力。扩展是插件,可以添加新的 SQL 级别函数、文件格式、优化器等,同时保持 DuckDB 核心的精简和高效。目前已经有数量惊人的第三方 DuckDB 扩展,我们正在努力简化社区贡献扩展的构建和分发过程。我们认为 DuckDB 可以通过社区扩展,通过统一的 SQL 接口访问的高性能数据架构连接起来,成为下一次数据革命的基础。

当然,今天的发布中会发现问题。但请放心,将会有 1.0.1 版本发布。将会有 1.1.0 版本。而且在某个时候也可能会有 2.0.0 版本。我们所有人都在为此长期奋斗。我们拥有这样做的团队、结构和资源。

致谢

首先,我们非常非常感谢大家。我们由衷地感谢所有贡献代码、提交问题或参与讨论、在各自环境中推广 DuckDB,以及所有 DuckDB 用户。没有你们,我们不可能做到!

我们还要感谢 CWI 数据库架构小组为我们提供了构建 DuckDB 的环境和专业知识,感谢早期为我们提供研究资助的组织,感谢使这一切成为可能(特别是早期客户)的优秀 DuckDB Labs 客户,以及 DuckDB 基金会的慷慨捐助者。我们特别感谢我们的长期黄金赞助商 MotherDuckVoltron DataPosit

最后,我们要感谢 DuckDB Labs 优秀而了不起的团队

因此,现在请和我们一起怀旧、感动,并对 DuckDB 的未来充满期待,与我们一同庆祝 DuckDB 1.0.0 的发布。我们一定会这样做。

马克和汉内斯

PS: 我们将于 8 月 15 日在西雅图举办下一次社区活动 DuckCon #5,距离今天仅几周时间。免费参加。希望在那里见到你!

如需媒体咨询,请联系 Gabor Szarnyas