宣布 DuckDB 1.0.0
概要:DuckDB 团队非常高兴地宣布,今天我们发布 DuckDB 1.0.0 版本,代号为“雪鸭”(anas nivis)。
要安装新版本,请访问安装指南。有关发行说明,请参阅发行页面。
自从 2018 年该项目的第一个源代码被编写以来,已经过去了近六年,并且发生了很多大事:现在有超过 300 000 行 C++ 引擎代码,超过 42 000 次提交,并且近 4 000 个问题被打开并再次关闭。DuckDB 也获得了显著的欢迎:该项目在 GitHub 和社交媒体平台上吸引了数万颗星和关注者。每月下载量达数百万次,仅扩展的下载流量每天就超过 4 TB。甚至有关于 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 存储格式的有限向前兼容性。此功能现在已经在野外使用了一段时间,没有出现严重问题——这使我们有信心保证使用 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 基金会 的慷慨捐助者。我们特别感谢我们长期的黄金赞助商 MotherDuck、Voltron Data 和 Posit。
最后,我们要感谢 DuckDB Labs 优秀的团队。
现在加入我们,一起怀旧,热泪盈眶,并为 DuckDB 的未来感到兴奋,并与我们一起庆祝 DuckDB 1.0.0 的发布。我们一定会这样做的。
Mark 和 Hannes
PS:我们将在 8 月 15 日在西雅图举行我们的下一个社区活动,DuckCon #5,距离今天只有短短几周的时间。入场免费。希望在那里见到你!
对于媒体咨询,请联系 Gabor Szarnyas。