文章摘要
OpenDuck是DuckDB的分布式版本,支持双执行模式和差分存储,旨在提升数据处理性能与扩展性。该项目托管在GitHub上,由CITGuru开发维护。
文章总结
OpenDuck:分布式DuckDB项目
OpenDuck是一个开源项目,实现了由MotherDuck首创的分布式DuckDB架构理念,包括差异存储、混合执行和透明远程数据库功能。
核心功能
差异存储系统:
- 采用追加式分层存储结构
- 使用PostgreSQL管理元数据
- 支持快照功能确保读取一致性
- 单一序列化写入路径,支持多并发读取
混合执行模式:
- 查询可同时在本地和远程执行
- 网关自动拆分执行计划
- 通过桥接操作符连接本地和远程计算
DuckDB原生目录集成:
- 实现DuckDB的StorageExtension和Catalog接口
- 远程表与本地表享有同等地位
开放协议:
- 基于gRPC和Arrow IPC的极简协议
- 仅需两个RPC即可完成查询执行和结果流式传输
架构设计
客户端(DuckDB进程) ←gRPC+Arrow→ 网关(Rust) → 多个Worker(DuckDB)
│
↓
Postgres元数据库 + 对象存储
快速开始
启动后端服务:
shell cargo build --workspace cargo run -p openduck -- serve -d mydb -t your-token构建扩展:
shell cd extensions/openduck && make使用Python客户端:
shell pip install -e clients/python export OPENDUCK_TOKEN=your-token python -c "import openduck; con = openduck.connect('mydb'); con.sql('SELECT 1 AS x').show()"
项目对比
OpenDuck vs MotherDuck
| 特性 | MotherDuck | OpenDuck | |------|-----------|----------| | 性质 | 商业云服务 | 开源项目 | | 协议 | 私有格式 | 开放协议 | | 存储 | 专有方案 | 开源方案 | | 执行 | 专有计划器 | 开放实现 |
OpenDuck vs Arrow Flight SQL
| 特性 | Arrow Flight SQL | OpenDuck | |------|-----------------|----------| | 范围 | 通用SQL数据库 | DuckDB专用 | | 集成 | 独立驱动 | 深度集成 | | 优化 | 客户端优化 | 原生优化 |
许可与致谢
项目采用MIT许可证,其架构灵感来源于MotherDuck团队关于差异存储和混合执行的研究成果。
项目地址:https://github.com/citguru/openduck 当前状态:151星标,3个分支,1位主要贡献者
评论总结
以下是评论内容的总结:
对DuckDB复杂性的担忧
- 有评论认为DuckDB的功能扩展使其变得复杂,偏离了核心的“单文件数据库”理念。
- 引用:“DuckDb is that, too. But it’s also an analytics engine like Polars...”(评论2)
- 引用:“they are still part of the ecosystem”(评论2)
并发写入的限制
- 用户指出DuckDB在多进程并发写入时存在限制,与SQLite的线程安全设计形成对比。
- 引用:“you can't write to it from multiple processes at the same time”(评论4)
- 引用:“DuckDB could behave more like SQLite”(评论4)
实际应用场景的需求
- 用户希望看到更多实际用例,并探讨了DuckDB在日志聚合和数据分析中的潜在应用。
- 引用:“would be nice to have some 'real-world' use cases”(评论5)
- 引用:“upload those in a parquet file... and query them”(评论5)
分布式实现的比较
- 有用户分享了基于Raft的分布式DuckDB方案,强调其强一致性和低延迟读取的优势。
- 引用:“reads are local... zero network latency”(评论6)
- 引用:“Raft + DuckDB works very well”(评论6)
技术实现的评价
- 有评论认为当前实现更像AI生成的案例研究,不适合生产环境。
- 引用:“one-shot output from AI... not a production implementation”(评论7)
存储碎片化问题
- 用户询问DuckLake如何处理存储碎片化,并探讨了可能的优化策略。
- 引用:“pages get spread all over the place”(评论9)
- 引用:“aggressive layer compaction?”(评论9)
其他技术推荐
- 用户推荐了Apache Datafusion及其联邦查询功能作为替代方案。
- 引用:“You might find... datafusion-federation of interest”(评论8)
社区贡献与支持
- 有开发者提到为DuckDB提交了支持Iceberg视图的PR,表达了对项目的支持。
- 引用:“sent my first PR... support iceberg views”(评论3)
总结呈现了用户对DuckDB功能扩展、并发限制、实际应用、分布式方案及技术实现的多角度讨论,既有批评也有建议和肯定。