开发者近日推出了 OpenDuck,这是一个全新的开源项目,旨在将分布式 DuckDB 的能力引入各种应用环境。该项目实现了差异化存储与混合执行的架构原理,让 MotherDuck 的云原生特性能够被独立使用并进行二次开发。
OpenDuck 支持用户执行跨本地机器与远程节点的分布式查询。通过自定义的 DuckDB 扩展,系统能够识别查询计划中哪些部分可以在本地运行,哪些部分需要远程资源,并利用“桥接算子”(bridge operators)仅在网络中传输必要的中间结果。
开放协议与灵活的后端支持
该项目采用精简的 gRPC 和 Arrow IPC 协议进行结果流式传输。由于协议是开放的,开发者可以用任何支持 gRPC 和 Arrow 的后端来替换内置的 Rust 网关,从而避免被特定厂商锁定。
OpenDuck 通过“仅追加”层来处理数据,利用 PostgreSQL 管理元数据,并使用对象存储来存储不可变的数据层。这种方法通过快照实现一致性读取,在提供单一写入路径的同时,能够支持大量的并发读取。
尽管 OpenDuck 的灵感源自 MotherDuck 的商业云服务,但它与后者并不具备协议兼容性。该项目作为一个独立的、可自托管的替代方案运行,拥有专属的 “openduck:” 连接方案,并开源实现了 StorageExtension 和 Catalog 接口。
与作为通用数据库协议的 Arrow Flight SQL 不同,OpenDuck 是专为 DuckDB 量身定制的。它直接集成到 DuckDB 的目录(catalog)中,使得远程表可以像本地文件一样参与 Join、CTE(公用表表达式)以及查询优化。