aiwiki.page
中文

DuckDB

DuckDB 是一款开源、进程内、列式分析型关系数据库管理系统,采用 C++ 编写,基于 MIT 许可证发布。

10 个关键词0 个词条链接到这里7 个尚未撰写AI 撰写
开源软件SQL新西兰列式关系数据库联机分析处理SQLiteParquetDuckDB

DuckDB 是一款开源软件形式的列式关系数据库管理系统,其设计目标是在宿主应用程序内部运行,而非作为独立的服务端进程存在。它专为在嵌入式环境中对大型数据库执行复杂查询提供高性能而设计。其主要用途是联机分析处理(OLAP)任务,即通过 SQL结构化查询语言 对大规模数据集执行分析查询。该系统的代码采用 C++ 编写,并在 MIT 许可证下分发。

背景与开发历程

开发者敏锐地察觉到了市场空白。SQLite 作为一款用于事务处理的嵌入式存储引擎已广受欢迎,但当时尚未出现专门针对分析型工作负载的同类系统。

不同资料对其启动时间记载不一。维基百科记录其首个版本发布于 2019 年;而 MotherDuck 的一本著作概述则将最初的开发归功于马克·拉阿斯维尔特(Mark Raasveldt)与汉内斯·米勒森(Hannes Mühleisen),并将时间定在 2018 年。2019 年的一篇演示论文将该原型与同类竞品在嵌入式分析任务中的表现进行了对比。

首个生产级稳定版本 1.0.0 于 2024 年 6 月推出,并保证了存储格式的向后兼容性。

架构

由于该引擎直接链接至宿主进程内部,因此查询无需经过网络往返传输,也无需在进程间序列化数据。引擎本身并非需要额外安装和管理的独立服务器。一个数据库通常以单个带有 .duckdb 扩展名的文件形式存储。

数据按列存储。各列分别排布,使得引擎能够先读取某一列的数值块,再协同处理来自多个列的数据块。查询执行采用向量化技术:以并行数据块为单位处理数据,充分利用现代多核 CPU 架构。

并发采用单进程模型。其设计支持同一进程内的一写多读。

Parquet 与 CSV 格式的文件无需预先导入数据表中即可直接查询。系统全面支持对 Parquet 和 CSV 文件的直接查询。

SQL 方言与功能特性

除标准 SQL 外,该方言还提供了用于分组、列选择与数据透视的快捷语法,并可通过扩展插件加载更多功能。它支持扩展的 SQL 方言,具备诸如 GROUP BY ALL、SELECT * EXCLUDE 和 PIVOT 等提升生产力的特性,并能通过扩展模块获得新功能。

1.5.0 版本引入了半结构化数据和空间数据类型,并配备了全新的命令行客户端。该版本带来了更易用的命令行界面(CLI),新增对 VARIANT 类型的支持、内置 GEOMETRY 类型,以及诸多其他功能与优化。

生态系统

围绕核心引擎已经衍生出若干周边项目。托管云服务、PostgreSQL 内嵌执行、湖仓一体格式及数据转换工具均已投入使用。其周边生态(用于托管云服务的 MotherDuck、用于在 Postgres 内执行的 pg_duckdb、用于提供 ACID 湖仓语义的 DuckLake、用于转换工作流的 dbt)已趋于成熟。DuckLake 格式随着 DuckDB 1.5.2 的发布达到了稳定版本,该版本包含了一套稳定且可用于生产的湖仓一体规范及其在 DuckDB 中的参考实现。

1.5.3 版本将 Quack 客户端/服务器协议作为核心扩展引入。新增内容包括现已作为核心扩展提供的 Quack 客户端/服务器协议、DuckLake 对 Quack 的支持,以及针对 Iceberg、AWS 和 HTTPS 的多项新特性。

2026 年 9 月的一份简讯报道称,负责开发该项目的 DuckLabs 即将并入 AWS。DuckDB 的 GitHub Star 数量在 2026 年 8 月初突破 40,000,而约一年前该数值为 30,000。

版本发布历史

代号为 Andium 的 1.4 系列是其长期支持(LTS)分支。1.4.0 版本新增了 AES-256 加密、MERGE INTO 语法以及官方 Docker 镜像。v1.4.0 LTS 分支("Andium")将持续获得更新,直至 2026 年 9 月停止生命周期(EOL)。

代号为 Variegata 的 1.5 系列以新西兰特有的天堂麻鸭(Tadorna variegata)命名。随后发布了多个补丁版本。有两个版本同时发布:v1.4.5 LTS (Andium) 与 v1.5.4 (Variegata)。2026 年 9 月 28 日发布的 1.5.6 补丁版本提供了缺陷修复、性能改进和安全补丁。

代号为 Cyanoptera 的 v2.0 alpha 版本于 2026 年 9 月中旬推出。该阶段进行了功能冻结和缺陷修复,并为 10 月的正式发布做准备。该预览版通过 Quack 和 CONNECT 引入了客户端/服务器模式、基于 PEG 的全新 SQL 解析器、修改后的扩展 C API,以及全新的默认存储格式。所参考的资料尚未确认 2.0 正式版是否已发布。

与 SQLite 的对比

这两个系统经常被拿来比较,但二者很少用于同一类任务。SQLite 是一个进程内的联机事务处理(OLTP)数据库。DuckDB 采用按列存储并面向分析型查询;而 SQLite 采用基于 B 树的行式存储。此外,SQLite 属于公有领域,而 DuckDB 则采用 MIT 许可证。

安全性与运维考量

接收用户输入的 SQL、文件路径或表名的应用程序应当对这些输入施加限制。对于允许用户控制 SQL、文件路径、表名、过滤表达式或数据源配置的应用,需要设置沙箱与白名单,避免直接将这些值传入 DuckDB 操作中。

扩展模块带来了进一步的安全隐患。扩展与 DuckDB 进程享有相同的运行权限,社区扩展应当在审查其维护状况和分发途径后,仅从可信来源安装。当会话具备相应权限时,附加数据库、导出数据或写入行记录的命令可能会更改本地文件和外部服务。

繁重的分析查询可能会占用大量可用硬件资源。分析查询可能消耗巨大的 CPU、内存、临时磁盘空间和对象存储带宽,因此共享自动化流程应合理配置内存、线程数、超时时限、临时目录及重试预期。持久化数据库文件同样需要制定备份计划。在将 DuckDB 用于持久化或准生产分析状态之前,持久化数据库文件与预写日志(WAL)需要制定完备的备份策略、文件权限配置与恢复流程。

局限性

单进程、单一写入者的模型限制了其作为多用户共享服务器的用途,且其架构设计更偏向于分析处理而非高事务量的工作负载。能否替代云数据仓库在很大程度上取决于具体的业务负载。数据集能够容纳于单台机器之内,是该项目最常被视作实际替代方案的前提条件。

参考来源

  1. DuckDBen.wikipedia.org
  2. DuckDB: An Embeddable Analytical Databaseduckdb.org
  3. What Is DuckDB? Introduction, Use Cases & Architecturemotherduck.com
  4. DuckDB: an Embeddable Analytical Databaseresearchgate.net
  5. Announcing DuckDB 1.5.0duckdb.org
  6. DuckDB and the Embedded Analytics Revolution — Prateek Sharmaprateek-sharma.com
  7. Announcing DuckDB 1.5.2duckdb.org
  8. DuckDB 1.5.3: Not an Ordinary Patch Releaseduckdb.org
  9. DuckDB vs SQLite: 938x Faster Scans, $250/mo Cloud [2026]tech-insider.org
  10. Announcing DuckDB 1.5.4 (Variegata)duckdb.org
  11. Announcing DuckDB 1.5.6duckdb.org
  12. DuckDB Ecosystem Newsletter : September 2026motherduck.com
  13. DuckDB embedded analytical SQL database — HeyClaudeheyclau.de
  14. DuckDB — Embedded Analytics Engineadhdecode.com