Hacker News 中文摘要

RSS订阅

分布式DuckDB实例 -- Distributed DuckDB Instance

文章摘要

OpenDuck是DuckDB的分布式版本,支持双执行模式和差分存储,旨在提升数据处理性能与扩展性。该项目托管在GitHub上,由CITGuru开发维护。

文章总结

OpenDuck:分布式DuckDB项目

OpenDuck是一个开源项目,实现了由MotherDuck首创的分布式DuckDB架构理念,包括差异存储、混合执行和透明远程数据库功能。

核心功能

  1. 差异存储系统

    • 采用追加式分层存储结构
    • 使用PostgreSQL管理元数据
    • 支持快照功能确保读取一致性
    • 单一序列化写入路径,支持多并发读取
  2. 混合执行模式

    • 查询可同时在本地和远程执行
    • 网关自动拆分执行计划
    • 通过桥接操作符连接本地和远程计算
  3. DuckDB原生目录集成

    • 实现DuckDB的StorageExtension和Catalog接口
    • 远程表与本地表享有同等地位
  4. 开放协议

    • 基于gRPC和Arrow IPC的极简协议
    • 仅需两个RPC即可完成查询执行和结果流式传输

架构设计

客户端(DuckDB进程) ←gRPC+Arrow→ 网关(Rust) → 多个Worker(DuckDB) │ ↓ Postgres元数据库 + 对象存储

快速开始

  1. 启动后端服务: shell cargo build --workspace cargo run -p openduck -- serve -d mydb -t your-token

  2. 构建扩展: shell cd extensions/openduck && make

  3. 使用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位主要贡献者

评论总结

以下是评论内容的总结:

  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)
  2. 并发写入的限制

    • 用户指出DuckDB在多进程并发写入时存在限制,与SQLite的线程安全设计形成对比。
    • 引用:“you can't write to it from multiple processes at the same time”(评论4)
    • 引用:“DuckDB could behave more like SQLite”(评论4)
  3. 实际应用场景的需求

    • 用户希望看到更多实际用例,并探讨了DuckDB在日志聚合和数据分析中的潜在应用。
    • 引用:“would be nice to have some 'real-world' use cases”(评论5)
    • 引用:“upload those in a parquet file... and query them”(评论5)
  4. 分布式实现的比较

    • 有用户分享了基于Raft的分布式DuckDB方案,强调其强一致性和低延迟读取的优势。
    • 引用:“reads are local... zero network latency”(评论6)
    • 引用:“Raft + DuckDB works very well”(评论6)
  5. 技术实现的评价

    • 有评论认为当前实现更像AI生成的案例研究,不适合生产环境。
    • 引用:“one-shot output from AI... not a production implementation”(评论7)
  6. 存储碎片化问题

    • 用户询问DuckLake如何处理存储碎片化,并探讨了可能的优化策略。
    • 引用:“pages get spread all over the place”(评论9)
    • 引用:“aggressive layer compaction?”(评论9)
  7. 其他技术推荐

    • 用户推荐了Apache Datafusion及其联邦查询功能作为替代方案。
    • 引用:“You might find... datafusion-federation of interest”(评论8)
  8. 社区贡献与支持

    • 有开发者提到为DuckDB提交了支持Iceberg视图的PR,表达了对项目的支持。
    • 引用:“sent my first PR... support iceberg views”(评论3)

总结呈现了用户对DuckDB功能扩展、并发限制、实际应用、分布式方案及技术实现的多角度讨论,既有批评也有建议和肯定。