说好绝不做服务器的 DuckDB,2.0 要当服务器了
DuckDB 创始人 Hannes Mühleisen 说过很多次:我们是嵌入式数据库,不做客户端-服务器,数据库的网络协议都是垃圾——这事他还专门写过一篇 VLDB 论文论证过。结果 8 月 26 日上线的一期 100 分钟播客里,他亲口承认:DuckDB 2.0 要当服务器了,靠一个叫 Quack 的协议,预计十月发布。
这期播客叫 What Next for DuckDB,挂在 duckdb.org 上,是 Developer Voices 频道(Kris Jenkins 主持)做的。信息量很大,从为什么食言做服务器,到 Iceberg 哪里不行、DuckLake 怎么来的,再到 DuckDB 为什么加入 AWS。官方那篇《A Preview of DuckDB v2.0》博客当时还在 Hacker News 榜首待了一下午。
两件事拼起来,DuckDB 这两年的路线其实很清晰:去年是湖仓之年,今年是"服务器之年"。
DuckDB 时间线
● ● ●
为什么食言
Hannes 不是随便改口。2016 年他和 Mark Raasveldt 写了篇 VLDB 论文《Don't Hold My Data Hostage》,拿 Wireshark 逆向 Oracle 的协议——Oracle 没有公开规范——顺手把 PostgreSQL、MySQL、MongoDB 的协议全扒了一遍,结论是这些协议烂到直接拿管道传 CSV 都比它们快 10 倍。
举个他吐槽的例子:PostgreSQL 协议每返回一行,都把字段类型、是否为空这些元数据重发一遍。一个表里所有行类型明明一样,偏要每行都说一次。根子是 Postgres 出身对象数据库,每个字段可以是不同的对象。
但真正让他改主意的,是用户。GitHub 上至少五六个项目自己给 DuckDB 糊了服务器层,一堆公司也这么干,还有人把 Arrow Flight SQL 硬接到 DuckDB 上——他觉得那个协议本身也有问题。拦是拦不住了,与其让 20 个人各写一套 RPC,不如官方做一个。
他在访谈里说得挺直白:"一致性是过誉的。"原话是 consistency is overrated,意思大概是我不需要永远正确,我只想解决用户的问题。
● ● ●
Quack 是什么
2026 年设计的协议,目的就一个:让 DuckDB 之间能互相说话。任何 DuckDB 实例都能当服务器,任何 DuckDB 都能连过去。我本地拿 DuckDB 1.5.5 实测了一把,服务端:
CALL quack_serve('quack:127.0.0.1:9495', token = 'my_token');
CREATE TABLE hello AS FROM VALUES ('world') v(s);
客户端:
CREATE SECRET (TYPE quack, TOKEN 'my_token');
ATTACH 'quack:127.0.0.1:9495' AS remote;
SELECT * FROM remote.hello;
能查到 world,跑通了。Quack 今年 5 月以预览版发布,2.0 转正。2.0 还引入了一个 CONNECT 语句,能把 SQL 直接推到 PostgreSQL、MySQL 服务器上执行,而不是把整张表拉过来——官方叫 remote pushdown optimizer。
Quack 架构
当服务器是要付代价的。DuckDB 以前没有对外端口,"俄罗斯的机器人没法从网上攻击它"——Hannes 原话。现在有了。认证、授权、断连清理、文件描述符耗尽,全是要补的课。他的解法是把认证和授权做成 SQL 级回调:你自己写个函数决定谁可以登录、谁能执行这条查询。不做死,给你钩子。
● ● ●
2.0 还有什么
访谈里顺带把 2.0 的清单过了一遍,加上官方预览博客,大概这样:
存储过程值得多说一句。DuckLabs 招了个叫 Denis 的博士,博士论文就是"把 PL/SQL 编译成递归子查询",现在在 DuckDB 里实现,Hannes 说这次会很快。
● ● ●
Iceberg 和 DuckLake
访谈里聊 Iceberg 的部分也有意思。Iceberg 连续两年是 DuckDB 被要求最多的功能,团队做了三年,2.0 里接近最完整的开源实现。但他对 Iceberg 的元数据设计很不满:一堆 Avro/JSON 元数据文件,查询规划要翻 1700 个文件。"他们拼命不想用数据库,最后 Iceberg REST catalog 里还是塞了一个 PostgreSQL。"
所以有了 DuckLake——元数据直接放数据库里,查询规划就是一条 SQL。"我们有一个数据库,而且我们不害怕用它。"数据文件还是 Parquet,跟 Iceberg 兼容,两边可以互相导入。DuckLake 扩展的下载量已经和 Iceberg 扩展一样多。
● ● ●
为什么嵌入式数据库要当服务器
DuckDB 日下载量现在超过 100 万。用户从"笔记本上跑着玩的人"变成了企业。DuckCon 上 Spotify 讲了个案例:他们做了一套 AI agent 基础设施,用户问"我去年都听了什么",agent 把问题翻译成 SQL,给每个用户现场开一个 DuckDB 实例,塞进全部听歌历史再查询。
单文件嵌入式数据库 + agent = 每个用户一个数据库实例。这个用法只有 DuckDB 这种形态接得住。但 agent 跑在服务器上,天然就要网络协议——这就是"服务器之年"的由来。
还有一层,访谈里 Hannes 说得挺坦诚:DuckDB 没有遥测(欧洲人讲隐私),他们从来不知道真实用户跑什么查询。以前有人报 bug,他们分不清是乌兹别克斯坦车库里的老哥还是世界五百强。加入 AWS 之后,这条反馈回路补上了——能看到真实负载长什么样,再决定优化什么。这大概是 AWS 收购 DuckLabs 最被低估的价值:买的不只是数据库团队,还有个看真实工作负载的窗口。
一年前他说:绝不做服务器。现在他说:服务器之年。2.0 十月见。
你会把 DuckDB 用在服务器场景吗?我猜三种答案:A. 早就在这么干了,等官方协议等很久了;B. 嵌入式挺好,服务器交给 PostgreSQL;C. 观望,看 2.0 的认证和权限做得怎么样。评论区聊聊。
参考来源:
访谈页面:https://duckdb.org/library/2026-08-26-what-next-for-duckdb DuckDB v2.0 官方预览:https://duckdb.org/2026/08/17/duckdb-20-highlights Quack 仓库:https://github.com/duckdb/duckdb-quack InfoQ 报道:https://www.infoq.com/news/2026/08/duckdb-v2-distributed/ DuckDB 波士顿 meetup:https://duckdb.org/events/2026-09-03-duckdb-boston-meetup