数据分析领域最火的“单机神器”DuckDB,终于向全球开发者的呼声“妥协”了。
长期以来,DuckDB 都严格坚守类似 SQLite 的“进程内嵌入式(In-Process)”定位。但在刚公布的 DuckDB v2.0 预览版(代号“Cyanoptera”桂红鸭) 中,官方正式宣布:开启“DuckDB Server 之年”。
从今年 3 月发布 1.5 版本至今,DuckDB 社区贡献了超过 10,000 次提交。这个被称为“分析界 SQLite”的利器,正在以 2.0 为跳板,蜕变为一个具备多租户、长运行能力、甚至能直接调度远程 Postgres 的全能现代数据引擎。
一、 破戒上线 Server 模式:不仅能联机,还能接管外部数据库
很多开发者曾因为 DuckDB 无法跨进程网络访问,不得不在它外层套上一层 FastAPI 或 DuckDB-Wasm。
在 v2.0 中,官方原生网络通信协议插件 quack 正式毕业为稳定版。任何 DuckDB 实例都可以一键化身服务端,而客户端则通过全新的 CONNECT 语法直连远端实例执行查询并流式拉取结果。
-- 服务端一键开启监听CALL quack_serve(token = 'my_token');-- 客户端无缝接入并执行ATTACH 'quack:Server.example.com' AS qk (TOKEN 'my_token');CONNECT qk;SELECT count(*) FROM events; -- 在服务端执行,结果流式传回DISCONNECT;更具破坏力的是,CONNECT 并不局限于 DuckDB 内部。
配合全新开发的远程下推优化器,你甚至可以直接用一条 CONNECT 'postgres://...' 指令,把整条复杂 SQL 直接推送到远端的 PostgreSQL 或 MySQL 上运算,而不是把原始数据傻傻地全表拉回本地。
很多人误以为 DuckDB 只适合只读分析,实际上它底层从诞生起就具备完整的 MVCC 事务机制。随着 Server 模式补齐,它在多租户长生命周期服务中的潜力被彻底释放。
二、 性能极限再被刷新:递归查询狂飙 40 倍,大表秒开
每一次大版本迭代,性能提升都是硬指标。
在官方公布的百万边图遍历(Single-source reachABIlity)微基准测试中,重写后的递归 CTE 引擎展现了惊人的提速:同一台笔记本电脑上,v1.5.4 耗时 4.90 秒,而 v2.0 预览版仅需 0.12 秒,速度整整提升了 40 倍。
百万边图可达性递归查询耗时对比:- DuckDB v1.5.4: 4.90 秒- DuckDB v2.0 : 0.12 秒 (约 40x 提升)除了算力,存储与内存开销也迎来了根本性变革:
- ART 索引分页换入:过去的索引需要全部常驻内存,大表极易吃满 RAM。2.0 引入了缓冲池管理的 ART 索引,按需加载,千万级大表瞬间秒开。
- 内存不足自动落盘:聚合算子在内存超限时支持自动 Spill 到磁盘,告别 OOM 闪退。
- 对象存储异步 I/O:重构了底层的 I/O 体系,让云端 S3/GCS 扫描与计算层完全解耦,云端湖仓查询吞吐成倍增长。
在实际业务中,JSON 日志是典型的数据形态:既想保留灵活多变的字段,又苦于纯文本 JSON 查询慢如蜗牛。
DuckDB 2.0 把VARIANT 变体类型做成了核心支柱。它被誉为“打了兴奋剂的 JSON”:你可以无 Schema 限制地写入任何结构的嵌套数据,但 DuckDB 会在存储层自动检测字段共性并做“切片粉碎(Shredding)”,直接享受列式压缩与向量化扫描。
CREATE TABLE events (payload VARIANT);INSERT INTO events VALUES ('{"user": {"id": 42, "tags": ["a", "b"]}}'::JSON::VARIANT);-- 直接对 VARIANT 字段进行高效率判定与提取SELECT * FROM events WHERE variant_contains(payload, {'user': {'id': 42}}::VARIANT);未来官方还计划直接将底层的 JSON 类型默认替换为 VARIANT 实现,让旧代码一行不改就能获得数倍性能跃升。
四、 原生 Triggers 与向量检索:把分析型数据库当生产主力
为了支撑服务端长时间运行,DuckDB 2.0 补齐了一系列传统数据库的硬核功能:
- 完整的 SQL 触发器(Triggers):全面支持 BEFORE / AFTER、行级与语句级触发器以及过渡表(REFERENCING OLD/NEW TABLE),数据变更审计日志再也不用在应用层手写补偿逻辑。
- NEAREST 向量 Join 语法:在大模型与 Embedding 火热的当下,Top-K 向量相似度检索直接原生化为一条 Join 子句,语义检索极其简洁。
- CTE 内部支持 DML:可以在 WITH 子句里直接做 DELETE ... RETURNING,一条 SQL 完成清洗、归档与中间物化全流程。
-- 向量相似度 Top-K 检索一步到位SELECT q.user_id, t.product_idFROM users qINNER JOIN products t APPROX NEAREST 2BY SIMILARITY array_cosine_similarity(q.embedding, t.embedding);五、 告别 Postgres 解析器:自研 PEG 引擎与插件生态独立过去 DuckDB 一直沿用从 PostgreSQL 裁剪出来的 SQL 解析器。2.0 彻底扔掉了这个历史包袱,换上了全新的自研 PEG(Parsing Expression Grammar)解析器。
这项改造带来了两个关键红利:
- 方言兼容模式:直接执行 SET dialect_compatibility_mode = 'spark';,即可兼容 Spark SQL 等语法习惯。
- 语法级插件扩展:第三方插件可以直接注入全新的 SQL 语法,生态扩展能力迈上新台阶。
与此同时,DuckDB 移除了沉重的 ICU 外部依赖库,将时区数据压缩至 45KB 自研实现,时区转换性能反而提升了 2.2 倍;扩展插件的 C API 也首次实现了 ABI 长期稳定保障,并支持企业自建私有签名仓库(CREATE EXTENSION REPOSITORY)。
总结与思考
从最初“单机嵌入式分析引擎”,到如今拥有异步 I/O、自研解析器、内置 Server 模式、支持私有源生态的综合性数据计算平台,DuckDB 2.0 正在重新定义单机与分布式、嵌入式与服务端的边界。
它没有盲目跟风做动辄几十个节点的重型分布式集群,而是把单机资源压榨到极致后,轻巧地通过网络协议向外延伸。
DuckDB 2.0 正式版预计将于今年秋季发布,目前预览版已开放体验。
你在日常工作中通常拿 DuckDB 当作什么工具使用?对于这次上线 Server 模式与自研解析器,你觉得它最先冲击的是传统数据仓库还是轻量分析工具?欢迎在评论区留下你的看法。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.