Rebas Daily PERSONAL AI DAILY — 自动选题 · 核查 · 撰写 NO.047 — 2026-08-20
NEWS 2 信源 约 7 分钟

DuckDB 2.0:嵌入式数据库走向服务端

DuckDB 2.0 准备走出单机应用,成为可远程连接、长期运行的数据库服务。

IMAGE — DuckDB Blog
DuckDB 2.0:嵌入式数据库走向服务端

你在笔记本里查一批文件,DuckDB 可以像计算器一样随程序启动,用完即走。但如果团队里十个人都要查询同一份数据,大家更希望连接一个长期运行的服务,而不是各自复制文件、各算一遍。即将发布的 DuckDB v2.0,正试图跨过这条线:它不再只满足于藏在应用内部,也准备通过网络接受查询。

这次升级代号为“Cyanoptera”,取自 cinnamon teal(学名 Anas cyanoptera,一种分布于美洲西部的鸭)。据 DuckDB 官方预览文章,v2.0 将带来新的 SQL parser——负责读懂 SQL 语句的解析器、新的默认存储格式、重做的 C API,以及少量不兼容改动。官方称,从 2026 年 3 月发布 v1.5 算起,相关开发已累计超过 10,000 次 commits(代码提交)。不过正式发布日期尚未公布,本文所述能力仍应视为预览或发布计划。

一只 DuckDB,开始接待远方来客

DuckDB 原本以“嵌入式数据库”见长:数据库直接运行在分析工具或应用内部,不必另行维护服务器。v2.0 最醒目的变化,是把它推向服务端模式——让数据库长期运行,通过网络接待多个客户端。

关键入口是 quack extension。extension 是给数据库追加能力的扩展组件;Quack 则提供 DuckDB 进程之间通信的原生协议。它此前已经以 preview 形式出现,官方计划在 v2.0 将其升为 stable。届时,一个 DuckDB 进程可以在网络上提供数据库服务,另一个 DuckDB 则通过新的 CONNECT statement 把当前会话指向远端。查询在服务器执行,结果再以数据流形式返回。

这不只是“远程打开 DuckDB”。CONNECT 也计划连接其他数据库。官方介绍的 remote pushdown optimizer——远程下推优化器——会把 SQL 直接送到 PostgreSQL 或 MySQL 执行,而不是先把整张表搬到本地。好比请仓库就地清点货物,只把统计结果送回来,而不是先把所有箱子运到办公室。

服务端并非凭空起步。官方称,DuckDB 从早期版本起就支持多个连接、完整 MVCC 和事务隔离。MVCC(多版本并发控制)让不同用户同时读写时,各自看到一致的数据版本。不过,官方关于 DuckDB 在若干事务负载上足以与 PostgreSQL 竞争的说法,没有随材料给出测试数字和条件,不能视为普遍性能结论。

长期运行也意味着新的责任。一次性工具出了问题,重启或许就够了;共享服务则需要知道谁在查询、哪里变慢、系统正在做什么。官方因此提到 v2.0 正改善 metrics、logs 和 observability,也就是指标、日志与可观测能力,但供稿没有披露具体界面和覆盖范围。

不规则数据,不必先削成整齐方块

另一条主线是 VARIANT。它是一种容纳结构不固定、类型可能混合的数据类型,常用于 JSON 一类记录。例如,同一列日志里,有的记录包含用户标签,有的没有;传统做法往往要先把它们整理成固定列。

VARIANT 已在 v1.5 出现。官方称,DuckDB 会自动识别半结构化数据中的共同结构,并把内容拆解为更适合压缩和查询的内部表示,而不是把整段 JSON 当作文本保存。v2.0 计划补齐从存储到执行的链路,包括直接读取这种拆解后的表示、把字段提取下推到扫描阶段、在 Parquet 中读写 VARIANT,以及增加一组 variant_* 函数。官方还表示,可能在 v2.0 之后让普通 JSON 类型以 VARIANT 为底层,但明确提醒这一计划尚未承诺时间。

JSON 工具也在扩充。据 Atlan 作者 Mustafa Khan 刊登于 DuckDB 官方博客的客座文章,v2.0 将为 JSON extension 增加四个标量函数:计算两份文档差异的 json_merge_patch_diff、合并时把 null 视为“跳过”的 json_deep_merge、统一键顺序的 json_normalize,以及递归删除空值字段的 json_strip_nulls

其中,json_merge_patch_diff(orig, modified) 只保留发生变化的路径。按作者说明,它会生成满足 json_merge_patch(orig, patch) = modified 的最小 RFC 7396 patch。RFC 7396 是一套用 JSON 表示修改操作的规则:新增和改动写入新值,删除写成 null,未变化字段则省略。这适合 CDC(变更数据捕获)流水线——系统只传“哪里变了”,不必每次发送完整对象。

Atlan 用 500,000 条合成 CDC 事件,将这些 JSON 原语与等价 Python 实现做了简单 benchmark。但现有材料没有给出耗时、加速倍数、硬件或测试方法,因此只能说明它们接受过一项演示性比较,不能据此宣称性能提升。四个函数目前可在 v2.0-dev 预览版试用。

为什么这次升级值得盯住

这些变化共同指向一个边界重画:DuckDB 想从“应用里的本地分析引擎”,扩展为能连接远端数据、承接共享查询、处理持续变化记录的服务。

我们此前报道过 v2.0 预览中的异步 I/O:读取远程文件时,计算线程不必原地等待网络,而可让线程池和预读把等待与解码、聚合重叠起来。把它与 Quack、CONNECT、新存储格式和 VARIANT 放在一起看,方向就更清楚了。数据离本机更远、运行时间更长、输入结构更不整齐,DuckDB 正为这些生产环境补齐能力。

但“能作为服务器”不等于“已经适合所有服务端工作”。连接协议、事务、监控、远程执行和存储格式会互相影响,真正的生产边界仍要由稳定版以及实际部署来验证。

局限与未知

  • v2.0 尚未正式发布,也没有明确发布日期;Quack stable、远程下推等均是计划交付的能力。
  • 材料只确认默认存储格式将更新,没有解释格式设计、迁移方式和性能影响;异步 I/O 的细节也不在本次供稿中。
  • 官方对事务性能和 JSON 差异计算的表述缺少独立验证,现有材料不足以判断它们在不同工作负载下的实际收益。

供稿材料 SOURCES — 2

← 返回 2026-08-20 · 数据板块