alitrack

DuckLake 不绑 DuckDB 了,Rust 引擎跑进生产环境

前几天 HN 上有个帖子:DuckDB 官方的 DuckLake 仓库,237 分,38 条评论。分数不算炸,但评论区第一条就是重点——

「很多人不知道,DuckLake 并不要求你用 DuckDB:它只是一份(优秀的)数据湖 spec,恰好能在 DuckDB 里跑。」

跟帖里一半人在惊讶「我一直以为 catalog 就是个 .duckdb 文件」。

这个误解值得单独写一篇。

● ● ●

先说结论

DuckLake 已经是一个独立于 DuckDB 的表格式标准:catalog 能跑在 Postgres、SQLite、MySQL 上,Rust 生态的 DataFusion 实现进了生产,TPC-H 22 条查询跑下来性能不掉,三个规模还都快了 1% 到 6%。

● ● ●

catalog 不是 DuckDB 文件

很多人对 DuckLake 的想象是这样的:数据放在一堆 Parquet 文件里,哪个文件是有效的、哪些被软删了,这些元数据记在一个 DuckDB 文件里。

实际架构两回事。DuckLake 是一份规范:元数据全部放进一个支持事务的关系数据库,数据放 Parquet。查询时不用像 Iceberg 那样先遍历一堆 manifest 文件再决定扫哪些 Parquet,而是一次带索引的 SQL 查找。

DuckLake 主开发 Pedro Holanda(pdet)在帖子里给出了 catalog 数据库的三条硬要求:

  • 支持主键
  • 支持基础类型(INTEGER、VARCHAR、TIMESTAMP)
  • 支持 ACID

满足这三条的数据库都能当 catalog。目前 DuckDB 官方扩展支持 DuckDB、SQLite、Postgres、DuckDB + Quack,MySQL 还处在实验状态。

DuckLake 架构:引擎层任选,catalog 落在事务数据库

DuckLake 架构:引擎层任选,catalog 落在事务数据库

● ● ●

HN 帖里 smithclay 提到的 datafusion-ducklake,是个 Rust 原生的 DuckLake 引擎,捐给了 Apache DataFusion Contrib 组织。仓库 2025 年 10 月建的,现在 208 stars,最近一次提交是 2026 年 10 月 10 日,活跃度不低。

真正有意思的我觉得还是它背后的生产故事。做 AI 基础设施的 Hotdata 公司,业务是给每个 AI agent 毫秒级开一个隔离数据库。他们之前自建过专用 catalog,太难维护;评估过 Iceberg,对他们的低延迟场景太重。最后选了 DuckLake,用 Postgres 当 catalog 存储,跑在高并发亚秒级响应的生产流量上。

他们还扩展了逻辑 catalog 能力:一个元数据库里装多个互相独立的 DuckLake catalog,支撑百万级的临时数据库,元数据基础设施和底层 Parquet 都不用复制。

性能他们自己量过,TPC-H 全部 22 条查询,DuckLake 管理的表对比直接扫 Parquet:

数据规模
DuckLake
直接 Parquet
比值
SF0.2
1,440 ms
1,474 ms
0.98x
SF1
4,398 ms
4,461 ms
0.99x
SF10
50,932 ms
53,942 ms
0.94x

注意这些其实是 Hotdata 自报的数字,用的 DataFusion 引擎,场景是他们自己的低延迟负载。不过趋势说得通:两边最终都走 DataFusion 的 Parquet reader,而 DuckLake 天然知道一个快照对应哪些文件,省掉了通用 Parquet 表的元数据发现开销。加上了快照、schema 演进、catalog 管理,代价约等于零。

● ● ●

标准化在加速

另一个信号:MotherDuck 在自己网站上免费送 O'Reilly 的《DuckLake: The Definitive Guide》。HN 帖里一堆人排队领书,中间还出了个小插曲——表单显示提交成功但书没发出去,MotherDuck 联合创始人 Ryan 七个小时前跟帖说已经修好,之前申请的人会补收。

一家商业公司给一个开放表格式出正式教科书并免费发放,意图很明确:把 DuckLake 往「跨引擎标准」的位置推。配合 DuckLake v1.0 今年 4 月宣布生产就绪,时间线是对得上的。

● ● ●

对你意味着什么

如果你的栈里已经有 Parquet 加 Postgres,什么都不用换:加一层 DuckLake catalog,就有了快照、time travel 和 schema 演进。查询引擎用 DuckDB 也行,用 DataFusion 也行,两边的实现都在。

回到 HN 那条热评。半年前说「DuckLake 只是 spec」还是个冷知识,现在 Rust 实现进了生产、教科书免费领,这个冷知识正在变成常识。

你的 Parquet 目录上,用的是哪家的 catalog?评论区聊聊。

● ● ●

参考来源

  1. 01
    HN 帖 "DuckDB Ducklake"(237 分,38 评论):https://news.ycombinator.com/item?id=49996149
  2. 02
    Bringing DuckLake to DataFusion(Hotdata,ducklake.select,2026-07-29):https://ducklake.select/2026/07/29/bringing-ducklake-to-datafusion/
  3. 03
    datafusion-ducklake 仓库:https://github.com/datafusion-contrib/datafusion-ducklake
  4. 04
    DuckLake v1.0 生产就绪公告(2026-04-13):https://ducklake.select/2026/04/13/ducklake-v1-0/
  5. 05
    MotherDuck DuckLake 页面(免费书):https://motherduck.com/product/ducklake/