DuckDB 是一款功能强大、部署简便的分析型数据库,其所有功能集成于单一二进制文件中。该项目计划于今年秋季发布重大更新——2.0 版本。

在 DuckDB 官网的一篇博客文章中,项目维护者详细介绍了促成此次大版本升级的几项核心特性。其中最重要的是客户端/服务器模式,这使得 DuckDB 既能作为面向单一客户端的轻量级嵌入式数据库(即其原始定位),也能作为多客户端服务运行。此前已发布的 quack 扩展以实验性方式实现了这一功能;在 DuckDB 2.0 中,quack 正式晋升为稳定版本。此外,quack 扩展还简化了对 PostgreSQL 和 MySQL 等其他受支持数据库的远程查询操作。

DuckDB 2.0 的诸多重要改进属于内部架构层面,但对终端用户影响深远。DuckDB 底层数据引擎现已支持异步处理,使 I/O 层与查询处理层能够独立扩展,并更充分地利用并行计算能力。这一改进结合其他内部优化,使整体查询速度显著提升,在特定工作负载下最高可达 40 倍加速。全新的数据库存储格式使得拥有大型索引和"宽表"(即多列表)的数据库能够更快速地打开和读取。经过完全重写的 SQL 解析器支持扩展对 SQL 语法的自定义扩展,并提供更详细的错误提示信息。

DuckDB 已拥有数量可观的第三方扩展,但这些扩展此前须基于不稳定的 C++ API 开发,每次 DuckDB 版本更新都需要重新编译。DuckDB 2.0 引入了稳定的 C API,为扩展提供了广泛的功能支持。新 API 还支持从单一头文件编译扩展,且无需随新版本发布重新编译。此外,一项正在推进中的功能允许用户注册自定义的 DuckDB 扩展仓库,无需强制通过社区仓库分发扩展。

DuckDB 2.0 的预览版现已以不稳定的每夜构建(nightly release)形式提供,但发布候选版本和正式版本的具体日期尚未确定,目标是在今年秋季的某个时间正式推出。

Q&A

Q1:DuckDB 2.0 新增的客户端/服务器模式有什么用?

A:DuckDB 2.0 新增的客户端/服务器模式让 DuckDB 不再局限于单一客户端的嵌入式数据库场景,而是可以同时为多个客户端提供服务。这一功能由 quack 扩展支持,在 2.0 版本中正式升级为稳定版,还支持远程查询 PostgreSQL 和 MySQL 等数据库,极大地拓展了 DuckDB 的应用场景。

Q2:DuckDB 2.0 的查询速度提升了多少?

A:DuckDB 2.0 对底层数据引擎进行了异步化改造,使 I/O 层与查询处理层能够独立扩展,结合其他内部优化,整体查询速度大幅提升。根据不同的工作负载类型,最高可实现 40 倍的性能加速。此外,新的存储格式也让大型索引和多列宽表的读取速度明显加快。

Q3:DuckDB 2.0 的扩展开发有哪些变化?

A:DuckDB 2.0 引入了稳定的 C API 来替代原有不稳定的 C++ API,扩展开发者不再需要在每次 DuckDB 版本更新后重新编译扩展。新 API 支持从单一头文件完成编译,大幅降低了开发成本。此外,还有一项进行中的功能允许用户自建扩展仓库,不再强制依赖官方社区仓库进行分发。