GitHub Explorer

smallpond 深度分析报告

GitHub: https://github.com/deepseek-ai/smallpond

一句话总结

DeepSeek 开源的轻量级分布式数据处理框架——将”分布式查询”问题降维为”分区管理 + DuckDB 单机查询”,用极简架构实现 PB 级数据处理(110.5 TiB 排序仅 30 分钟)。

值得关注的理由

  1. 架构理念新颖:不做分布式 SQL 引擎,而是”分区级分布式批处理”——每个分区内嵌独立 DuckDB 实例,分区间通过共享文件系统交换数据,零额外基础设施依赖
  2. DeepSeek 内部实战验证:v0.15.0 版本号暗示内部已迭代 15 个版本,GraySort 基准上 50 节点排序 110.5 TiB 仅 30 分 14 秒,是 DeepSeek 训练数据处理的核心工具
  3. 极简代码值得学习:14K 行 Python 实现了完整的分布式数据处理框架(逻辑计划 → 优化 → 调度 → 执行),是理解分布式系统设计的绝佳教材

项目画像

维度数据
GitHubhttps://github.com/deepseek-ai/smallpond
Star / Fork4,940 / 443
代码行数14,214 (Python 96%, RST 3%)
项目年龄1 个月(公开),内部迭代至 v0.15.0
开发阶段一次性开源后停滞(公开仅 3 次提交)
贡献模式单人维护(wangrunji0408),内部开发后开源
热度定位中等热度(4.9K Stars,DeepSeek 品牌驱动)
质量评级代码[良好] 文档[良好] 测试[基本]

作者视角:为什么存在这个项目

创始人/作者背景

DeepSeek AI(87K GitHub followers),中国最受关注的 AI 开源组织之一。smallpond 在 2025 年 2 月”开源周”与 3FS(分布式文件系统)、FlashMLA、DeepEP 同期发布。smallpond 与 3FS 构成”存储+计算”配对,是 DeepSeek 训练数据处理基础设施的一部分。

问题判断

DeepSeek 训练大模型需要处理 PB 级数据(清洗、去重、分词),但 Spark 太重(需长期运行服务、运维复杂),DuckDB 单机无法扩展到多节点。DeepSeek 需要的是”像写 DuckDB SQL 一样简单,但能跑在 50 个节点上”的方案。时机:DuckDB 在 2024 年已足够成熟(单机性能优秀),但缺乏官方分布式扩展方案。

解法哲学

  • 降维而非对抗:不做分布式查询优化器(那是 Spark/Trino 的路),而是把问题降维为”分好区 → 每个分区独立用 DuckDB 处理”
  • 文件系统即通信:Scheduler 和 Executor 通过 pickle 文件 + 目录结构通信,不引入消息队列或 RPC
  • 无长期运行服务:用完即走,不需要常驻的 master/worker 进程
  • 明确不做:不做跨分区 JOIN 优化、不做流式处理、不做云原生存储集成(S3 等)

战略意图

smallpond 是 DeepSeek AI 基础设施开源矩阵的组成部分。与 3FS(存储层)配对,展示 DeepSeek 在数据工程领域的技术实力。开源目的更偏向技术影响力和人才吸引,而非构建外部社区生态(从极低的 PR 合并率可见一斑)。

核心价值提炼

创新之处

  1. 分区级分布式降维设计 — 新颖度 4/5 | 实用性 4/5 | 可迁移性 4/5 将分布式查询问题降维为分区管理问题。每个 Task 创建独立的内存中 DuckDB 实例,天然隔离无锁。用 DuckDB 的单机执行能力换取分布式系统的复杂性。代价:跨分区操作需用户手动管理。

  2. 双模式执行引擎 — 新颖度 3/5 | 实用性 5/5 | 可迁移性 4/5 Ray 模式用于交互式开发,原生调度模式用于生产环境,两者共享同一逻辑计划层。开发时快速迭代,部署时不依赖 Ray。

  3. 基于文件系统的 Scheduler-Executor 通信 — 新颖度 4/5 | 实用性 3/5 | 可迁移性 3/5 用 pickle 文件 + 目录结构(pending/→running/→done/)替代 RPC/消息队列实现任务分发。零额外基础设施,但依赖共享文件系统性能。

  4. Producer-Consumer 分区模式 — 新颖度 3/5 | 实用性 4/5 | 可迁移性 5/5 Producer 写出多分区文件(hash/range 分区),Consumer 按分区 ID 收集。物理实现是 Parquet 文件的目录组织。简单但有效。

可复用的模式与技巧

  1. 逻辑计划 → 物理执行的分层架构:logical/node.py 定义 DAG 节点(SqlNode/MapNode/RepartitionNode 等),execution/scheduler.py 将逻辑计划转为可调度任务 — 适用于任何需要执行计划的系统
  2. DuckDB 嵌入式短连接模式:每个 Task 创建临时 DuckDB 实例,用完即释放,天然避免并发和状态管理问题 — 适用于任何需要并行 SQL 处理的场景
  3. SQL 融合优化:连续 SQL 节点自动融合为嵌套子查询(SELECT ... FROM (SELECT ...)),减少中间物化 — 虽然优化器仅 55 行,但思路清晰
  4. Hydra-style 配置继承:通过 Python dataclass 实现分层配置(全局 → 任务级),简洁但可扩展

关键设计决策

  1. 分区级分布 vs 查询级分布:选择了前者——简单但牺牲了跨分区查询的自动优化能力。Spark/Daft 选择后者,功能更强但复杂度也更高
  2. DuckDB 而非自研 SQL 引擎:复用 DuckDB 的高性能单机引擎,换来了极小的核心代码量(14K 行),但绑定了 DuckDB 的能力边界
  3. 文件系统通信而非 RPC:极简但依赖共享文件系统(3FS/NFS),不适合跨区域部署
  4. task.py 3197 行超级模块:承载 SQL 执行、Arrow 计算、流式处理、分区等多重职责,是技术债的集中点

竞品格局与定位

竞品对比矩阵

维度smallpondSparkDaftPolars CloudMotherDuck
定位分区级分布式查询级分布式查询级分布式单机+云扩展DuckDB 云托管
复杂度极低高中低低
SQL 引擎DuckDBCatalyst自研自研DuckDB
常驻服务无需要可选无SaaS
云原生无(需 3FS/NFS)完善完善完善完善
甜区10TB-1PB100GB-PB+10GB-PB1GB-100GB1GB-1TB
成熟度概念验证生产级生长期生长期生产级

差异化护城河

  1. 极致简单:14K 行代码实现完整分布式框架,学习和定制成本极低
  2. 3FS 配对优势:与 DeepSeek 自研分布式文件系统深度集成,在 DeepSeek 内部形成闭环
  3. GraySort 基准验证:110.5 TiB / 30 分钟的实战数据,证明了架构可行性

竞争风险

  1. Daft 快速追赶:Rust 编写、查询级分布、云原生支持,功能更全面且生态在快速增长
  2. MotherDuck 商业化:DuckDB 的官方云方案,简单场景直接替代
  3. 社区停滞风险:公开后 1 周即停止更新,PR 合并率 10%,可能沦为”弃坑”项目

生态定位

smallpond 填补了”DuckDB 分布式扩展”的开源空白,但定位非常窄——仅适合有共享文件系统的私有集群环境。在云原生场景(S3/GCS)完全缺席,这是其最大的生态限制。

套利机会分析

  • 信息差: 中等——4.9K Stars 主要靠 DeepSeek 品牌驱动,但架构设计理念(降维思想)的价值被低估。14K 行代码实现的分布式框架是极好的学习材料
  • 技术借鉴: 分区级分布的降维思想、DuckDB 嵌入式短连接模式、文件系统通信、逻辑-物理计划分层——都可迁移到其他数据处理系统
  • 生态位: 填补了”DuckDB + 多节点 + 无服务”的空白,但缺少云存储支持限制了适用范围
  • 趋势判断: 项目本身增长动力不足(停更信号明显),但”DuckDB 分布式扩展”的需求趋势确定。关注 Daft、MotherDuck 等更活跃的方案

风险与不足

  1. 停更风险高:公开仓库仅 3 次提交,最后更新 2025-03-05,PR 合并率 10%,Issue 关闭率 15%
  2. 无云存储支持:不支持 S3/GCS,仅支持本地文件系统和 3FS,限制了绝大多数用户场景
  3. task.py 技术债:3197 行超级模块承载多重职责,可维护性差
  4. 优化器极其简陋:仅 55 行代码、1 条规则(SQL 融合),无分区剪枝、无代价模型、无谓词下推
  5. 多节点调度 Bug:Issue #29 报告任务只在当前节点运行,核心分布式能力存在实际问题
  6. 社区文件缺失:健康度评分 37/100,无 CONTRIBUTING.md、无 Issue/PR 模板

行动建议

  • 如果你要用它: 仅在有共享文件系统(NFS/3FS)+ 10TB+ 数据量 + 批处理场景下考虑。云环境用 Daft 或 MotherDuck 更合适。不建议作为生产依赖(停更风险)
  • 如果你要学它: 极佳的分布式系统学习材料。重点关注 smallpond/logical/node.py(逻辑计划设计)、smallpond/execution/scheduler.py(任务调度)、smallpond/execution/task.py(DuckDB 集成方式)、smallpond/dataframe.py(用户 API 设计)
  • 如果你要 fork 它: 可改进方向——(1) 添加 S3/GCS 存储后端支持;(2) 拆分 task.py 超级模块;(3) 扩展优化器(分区剪枝、谓词下推);(4) 修复多节点调度 Bug;(5) 添加 CONTRIBUTING.md 和社区治理

知识入口

资源链接
DeepWiki已收录
Zread.ai已收录
关联论文无
在线 Demo无
官方文档deepseek-ai.github.io/smallpond
PyPIsmallpond v0.15.0
HN 讨论Smallpond: Distributed Computing to DuckDB

相关报告