smallpond 深度分析报告
一句话总结
DeepSeek 开源的轻量级分布式数据处理框架——将”分布式查询”问题降维为”分区管理 + DuckDB 单机查询”,用极简架构实现 PB 级数据处理(110.5 TiB 排序仅 30 分钟)。
值得关注的理由
- 架构理念新颖:不做分布式 SQL 引擎,而是”分区级分布式批处理”——每个分区内嵌独立 DuckDB 实例,分区间通过共享文件系统交换数据,零额外基础设施依赖
- DeepSeek 内部实战验证:v0.15.0 版本号暗示内部已迭代 15 个版本,GraySort 基准上 50 节点排序 110.5 TiB 仅 30 分 14 秒,是 DeepSeek 训练数据处理的核心工具
- 极简代码值得学习:14K 行 Python 实现了完整的分布式数据处理框架(逻辑计划 → 优化 → 调度 → 执行),是理解分布式系统设计的绝佳教材
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/deepseek-ai/smallpond |
| Star / Fork | 4,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 合并率可见一斑)。
核心价值提炼
创新之处
-
分区级分布式降维设计 — 新颖度 4/5 | 实用性 4/5 | 可迁移性 4/5 将分布式查询问题降维为分区管理问题。每个 Task 创建独立的内存中 DuckDB 实例,天然隔离无锁。用 DuckDB 的单机执行能力换取分布式系统的复杂性。代价:跨分区操作需用户手动管理。
-
双模式执行引擎 — 新颖度 3/5 | 实用性 5/5 | 可迁移性 4/5 Ray 模式用于交互式开发,原生调度模式用于生产环境,两者共享同一逻辑计划层。开发时快速迭代,部署时不依赖 Ray。
-
基于文件系统的 Scheduler-Executor 通信 — 新颖度 4/5 | 实用性 3/5 | 可迁移性 3/5 用 pickle 文件 + 目录结构(
pending/→running/→done/)替代 RPC/消息队列实现任务分发。零额外基础设施,但依赖共享文件系统性能。 -
Producer-Consumer 分区模式 — 新颖度 3/5 | 实用性 4/5 | 可迁移性 5/5 Producer 写出多分区文件(hash/range 分区),Consumer 按分区 ID 收集。物理实现是 Parquet 文件的目录组织。简单但有效。
可复用的模式与技巧
- 逻辑计划 → 物理执行的分层架构:
logical/node.py定义 DAG 节点(SqlNode/MapNode/RepartitionNode 等),execution/scheduler.py将逻辑计划转为可调度任务 — 适用于任何需要执行计划的系统 - DuckDB 嵌入式短连接模式:每个 Task 创建临时 DuckDB 实例,用完即释放,天然避免并发和状态管理问题 — 适用于任何需要并行 SQL 处理的场景
- SQL 融合优化:连续 SQL 节点自动融合为嵌套子查询(
SELECT ... FROM (SELECT ...)),减少中间物化 — 虽然优化器仅 55 行,但思路清晰 - Hydra-style 配置继承:通过 Python dataclass 实现分层配置(全局 → 任务级),简洁但可扩展
关键设计决策
- 分区级分布 vs 查询级分布:选择了前者——简单但牺牲了跨分区查询的自动优化能力。Spark/Daft 选择后者,功能更强但复杂度也更高
- DuckDB 而非自研 SQL 引擎:复用 DuckDB 的高性能单机引擎,换来了极小的核心代码量(14K 行),但绑定了 DuckDB 的能力边界
- 文件系统通信而非 RPC:极简但依赖共享文件系统(3FS/NFS),不适合跨区域部署
- task.py 3197 行超级模块:承载 SQL 执行、Arrow 计算、流式处理、分区等多重职责,是技术债的集中点
竞品格局与定位
竞品对比矩阵
| 维度 | smallpond | Spark | Daft | Polars Cloud | MotherDuck |
|---|---|---|---|---|---|
| 定位 | 分区级分布式 | 查询级分布式 | 查询级分布式 | 单机+云扩展 | DuckDB 云托管 |
| 复杂度 | 极低 | 高 | 中 | 低 | 低 |
| SQL 引擎 | DuckDB | Catalyst | 自研 | 自研 | DuckDB |
| 常驻服务 | 无 | 需要 | 可选 | 无 | SaaS |
| 云原生 | 无(需 3FS/NFS) | 完善 | 完善 | 完善 | 完善 |
| 甜区 | 10TB-1PB | 100GB-PB+ | 10GB-PB | 1GB-100GB | 1GB-1TB |
| 成熟度 | 概念验证 | 生产级 | 生长期 | 生长期 | 生产级 |
差异化护城河
- 极致简单:14K 行代码实现完整分布式框架,学习和定制成本极低
- 3FS 配对优势:与 DeepSeek 自研分布式文件系统深度集成,在 DeepSeek 内部形成闭环
- GraySort 基准验证:110.5 TiB / 30 分钟的实战数据,证明了架构可行性
竞争风险
- Daft 快速追赶:Rust 编写、查询级分布、云原生支持,功能更全面且生态在快速增长
- MotherDuck 商业化:DuckDB 的官方云方案,简单场景直接替代
- 社区停滞风险:公开后 1 周即停止更新,PR 合并率 10%,可能沦为”弃坑”项目
生态定位
smallpond 填补了”DuckDB 分布式扩展”的开源空白,但定位非常窄——仅适合有共享文件系统的私有集群环境。在云原生场景(S3/GCS)完全缺席,这是其最大的生态限制。
套利机会分析
- 信息差: 中等——4.9K Stars 主要靠 DeepSeek 品牌驱动,但架构设计理念(降维思想)的价值被低估。14K 行代码实现的分布式框架是极好的学习材料
- 技术借鉴: 分区级分布的降维思想、DuckDB 嵌入式短连接模式、文件系统通信、逻辑-物理计划分层——都可迁移到其他数据处理系统
- 生态位: 填补了”DuckDB + 多节点 + 无服务”的空白,但缺少云存储支持限制了适用范围
- 趋势判断: 项目本身增长动力不足(停更信号明显),但”DuckDB 分布式扩展”的需求趋势确定。关注 Daft、MotherDuck 等更活跃的方案
风险与不足
- 停更风险高:公开仓库仅 3 次提交,最后更新 2025-03-05,PR 合并率 10%,Issue 关闭率 15%
- 无云存储支持:不支持 S3/GCS,仅支持本地文件系统和 3FS,限制了绝大多数用户场景
- task.py 技术债:3197 行超级模块承载多重职责,可维护性差
- 优化器极其简陋:仅 55 行代码、1 条规则(SQL 融合),无分区剪枝、无代价模型、无谓词下推
- 多节点调度 Bug:Issue #29 报告任务只在当前节点运行,核心分布式能力存在实际问题
- 社区文件缺失:健康度评分 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 |
| PyPI | smallpond v0.15.0 |
| HN 讨论 | Smallpond: Distributed Computing to DuckDB |