HN精选|DuckDB 2.0预览

DuckDB 2.0:服务器模式,新解析器,快40倍

背景

DuckDB 官方发布 v2.0 预览文章,代号「Cyanoptera」(肉桂色鸭的一种,呼应品牌梗)。这将是自 v1.5(3 月)以来 1 万多个 commit 的集大成之作,今秋正式发布。文章宣布了几个「大事」:新 SQL 解析器、新默认存储格式、重做的 C API,以及少量精心挑选的破坏性变更。在 Hacker News 获得 509 分、91 条评论。

十大亮点(节选)

1. DuckDB 变成服务器。 Quack 扩展正式转正:任何 DuckDB 进程都可以通过网络对外提供数据库服务,配合新的 CONNECT 语句,还能把 SQL 直接下推(remote pushdown)到 PostgreSQL/MySQL 执行——「在 DuckDB 里查 PG,不用把表拉过来」。官方坦言,支持多连接、MVCC 和事务的能力其实一直都有,客户端/服务器模式终于让这套机制在长驻部署中发光。

2. VARIANT 成为一等公民。 官方称其为「打了激素的 JSON」:每行可以装不同结构的数据,但自动「切碎」(shred)存储,压缩好、查询快,还无需声明 schema。v2.0 打通了从存储到扫描的端到端管线,未来普通 JSON 类型也会由 VARIANT 承载。

3. 触发器来了。 BEFORE/AFTER、行级/语句级、transition tables 一应俱全,审计表这类经典场景终于不用靠应用层硬扛。

4. 新 SQL 解析器。 抛弃沿用多年的 PostgreSQL 派生解析器,换成自研的 PEG 解析器:错误信息带精确源码位置,扩展可以直接挂进语法(未来会有全新 SQL 方言的扩展),还首次提供 dialect_compatibility_mode=’spark’ 兼容模式。

5. 异步 I/O 全面铺开。 对象存储读取不再被同步阻塞,Parquet、CSV、自有格式以及异步写入都支持,网络存储上的查询提速显著。

6. 快 40 倍的递归 CTE。 递归 CTE 引擎重写后,百万边图的单源可达性查询从 4.90s 降到 0.12s;聚合下推、行组剪枝、分区感知规划也让存量查询普遍受益。

7. 存储格式 v2。 ART 索引改为缓冲管理(不再常驻内存),大索引表「秒开」;列元数据惰性加载;DICT_FSST 压缩默认开启;读取时更强的损坏校验。

8. 告别 ICU。 时区/日历/排序规则不再依赖 ICU 库,改用 IANA 数据压缩到约 45kB 的自研实现,实测时区转换快 2.2 倍、德文排序过滤快 2.6 倍。

9. 扩展写一次,永远兼容。 稳定 C API 大幅扩展,由 YAML 规格声明式生成并 CI 校验,API/ABI 不再漂移;扩展作者从此只需构建一次。

社区反响

评论区最热的话题是方向之变:有人感叹「过去一年 DuckDB 的演进像是从进程内引擎转向云数仓的基石」,创始团队曾对这条路很谨慎,但 MotherDuck 的存在让「DuckDB 即服务」几乎成为必然;还有人澄清了 DuckLabs 与 MotherDuck 的合作关系,并提及新的 ducklake 项目。另一些人在许愿 PL/pgSQL 这类过程化功能,还有人称其为「令人惊叹的项目」,「v2 快点来」。

怎么看

v2.0 的信号很明确:嵌入式分析引擎的舒适区已经装不下 DuckDB 的野心,它正在同时向服务器形态、云数仓底座和更广的 SQL 生态(Spark 兼容、PG 下推)扩张。对普通用户来说,最大的实惠可能是「查询普遍变快 + 大索引表秒开」,以及扩展生态从此不再随版本碎裂。

原文:A Preview of DuckDB v2.0
HN 讨论:news.ycombinator.com/item?id=49330781

Leave a Reply

Your email address will not be published. Required fields are marked *