2026-06-21||Source

DiVo BioData Scrubbing: 让生物计算的数据入口告别"随手脚本"

日期: 2026-06-21

生物计算项目中,数据获取是最基础也是最混乱的环节。

工程师们习惯随手写个 shell 脚本下载 PDB、临时调个 API 抓 MSA、手动 scp 同步远端文件——这些脚本散落在各个工作空间里,没有复用、没有缓存、没有审计。

DiVo BioData Scrubbing 解决的就是这个问题:把数据获取从"临时脚本"升级为"确定性基础设施"。


一、问题:数据获取的"隐性成本"

生物计算项目的数据获取需求看似简单,实际上有大量隐性成本:

数据源碎片化。PDB 结构文件走 FTP,UniProt 序列走 REST API,NCBI 分类信息走 datasets 工具,PRIDE 质谱数据走 Aspera 高速传输,MSA 搜索走 ColabFold 的 MMseqs2 API。每个数据源有独立的协议、认证方式、速率限制和错误处理逻辑。

脚本随意散布。每个项目的工作空间里都躺着几个 run_download_msa.shsync_pdb.pyfetch_uniprot.py。这些脚本是工程师花 10 分钟随手写的,没有错误处理、没有重试逻辑、没有缓存,下次换个项目又要重写一遍。

重复下载浪费。同一份 Swiss-Prot 数据库(~570MB)、同一组 GPCR 家族的 MSA 结果,在三个不同项目中被反复下载。带宽和时间白白浪费,而本地磁盘上明明已经有这些数据。

跨节点路径混乱。本地工作站和云端 GPU 服务器之间的文件同步靠手动 scp/rsync。哪台机器上有什么数据、路径是什么、版本是否一致——全靠记忆和约定。

这些"隐性成本"加起来,每个项目在数据获取上浪费的时间远超想象。更关键的是,随手脚本缺乏确定性——同一条命令在不同时间、不同机器上执行,可能得到不同结果,导致下游计算结果不可复现。


二、思路:从"临时脚本"到"数据处理集散中心"

BioData Scrubbing 的核心理念是:把数据获取从项目的临时操作,升级为团队的基础设施

它不是一个大而全的"万能下载器",而是一个数据处理集散中心——数据在这里汇聚,按规则分发,按层级缓存,用完后自动归档。

2.1 三层缓存:本地有就读本地,没有才下载

这是整个设计中最核心的决策。数据获取不是每次都从远端拉取,而是经过三层检查:

请求 accession "P12345"
  │
  ├─ 第一层: 项目工作空间缓存
  │    "这个项目之前下载过吗?" → 有就直接用
  │
  ├─ 第二层: 本地永久数据镜像
  │    "其他项目下载过,存在本地公共区吗?" → 有就拷贝过来用
  │
  └─ 第三层: 远端数据源
       "本地没有,去网上下载"
       └─ 下载完成后,自动落盘到本地永久镜像,下次别的项目就能直接从第二层命中

三层缓存的本质是把"下载"变成"命中"。第一次下载 Swiss-Prot 需要 5 分钟,之后所有项目、所有工程师都只需要毫秒级的本地读取。

缓存层级的关键设计:

层级性质特点
工作空间缓存项目级临时缓存项目独有,项目结束后可清理
本地永久镜像团队级公共数据只增不减,跨项目共享
远端数据源数据的最终来源按需访问,结果自动落盘

一个重要细节:只有公共数据才落盘到永久镜像。MSA 搜索结果、序列文件、结构文件——这些是通用数据,值得永久保存。项目特定的计算中间产物(如某一轮实验的临时结果)只保留在工作空间缓存中,不会污染公共镜像。

2.2 Provider 注册表:自动路由,无需记忆

用户不需要知道"PXD005573 应该去 PRIDE FTP 下载"、"P12345 应该调 UniProt REST API"。系统根据 accession 的模式自动识别数据源并路由到对应的处理器。

每个数据源封装为一个独立的 Provider 模块,内部对接对应的开源工具(如 PRIDE 官方客户端、NCBI 的 datasets 工具),对外提供统一的检索语义。新增数据源只需实现 Provider 接口,注册到路由表即可。

2.3 确定性流水线:同样的输入,同样的输出

整个检索过程遵循固定的 9 步流水线:验证输入 → 解析缓存 → 获取元数据 → 过滤 → 下载(如需要)→ 校验 → 保存 → 持久化 → 富集结果。

每一步都有明确的输入输出约定,失败时记录具体原因而非静默跳过。每次检索的结果(缓存层级、耗时、文件列表)都记录在案,确保下游计算的可复现性。


三、数据源覆盖

3.1 已实现

数据源类型Accession 模式上游依赖
PRIDE Archive质谱蛋白质组学PXD / MSV / JPST / IPX官方 Python 客户端
NCBI Datasets基因组与分类学GCF / GCA / Taxonomy官方 datasets 工具
UniProt蛋白质序列与注释P / Q / O / TrEMBL官方 REST API

3.2 规划中

数据源类型优先级
ColabFold MSA多序列比对高(结构预测管线必需)
PDB / mmCIF蛋白质结构高(对接与结构分析必需)
IEDB免疫表位中(免疫相关项目)
MGnify宏基因组中(微生物组项目)
PubMed文献低(文献辅助分析)

3.3 与现有脚本的整合

BioData Scrubbing 的设计过程中,我们审计了团队所有工作空间中散落的临时数据获取脚本(包括 /mnt/e/biodb 下的同步脚本和三个项目空间中的 run_msa_*.shfetch_*.py 等),梳理出 5 个数据源的重复覆盖。这些脚本的功能全部被整合并标准化到 Provider 体系中,原有脚本逐步退役。


四、差异化:不是"又一个下载器"

4.1 与直接调用 API 的区别

直接调 API 获取数据是"一次性操作"——调完、拿到数据、用完丢弃。BioData Scrubbing 是"基础设施"——调完、缓存、持久化、下次自动命中。

维度直接调 API / 随手脚本BioData Scrubbing
缓存无(或临时文件)三层自动缓存,跨项目共享
可复现性不确定(依赖网络状态)确定性(同一 accession 同一结果)
审计每次检索记录缓存层级和耗时
数据源路由手动(记 API 端点)自动(按 accession 模式匹配)
文件校验依赖开发者自觉自动 MD5 校验 + 文件大小验证
团队复用靠复制粘贴脚本公共镜像自动共享

4.2 与"数据仓库"方案的区别

有人可能会问:为什么不直接建一个数据仓库,把所有数据提前下载好?区别在于:

  • 数据仓库面向"已知数据":你提前知道需要哪些数据,批量下载。但生物计算中很多数据需求是临时的、突发的——"这个新发现的 GPCR 同源蛋白,帮我拉一下它的序列和同源结构"。
  • BioData Scrubbing 面向"按需发现":第一次请求时从远端下载,之后自动进入缓存。它不需要预判数据需求,但能保证"下载过一次就永远不需要再下载"。

五、在团队工具生态中的位置

BioData Scrubbing 是 DiVo Gen²AI 工具链的"数据入口层":

结构预测 (Protenix)  ←──  MSA 数据
序列分析 (RNALens)    ←──  UniProt 序列
对接管线 (DiVoProtein) ←──  PDB 结构
质谱分析                ←──  PRIDE 数据集
文献辅助                ←──  PubMed 摘要
    ↑                        ↑
    └────────┬───────────────┘
             │
    BioData Scrubbing(统一数据入口)

所有需要外部数据的工具,都通过 BioData Scrubbing 获取数据,而非各自独立调用 API。这确保了:

  • 数据一致性:同一份数据在所有工具中版本一致
  • 资源效率:下载一次,全团队共享
  • 可审计:数据来源和版本可追溯

六、未来方向

短期

  • 完成 MSA 和 PDB 数据源的 Provider 封装
  • 建立缓存统计面板,可视化各层级命中率

中期

  • 支持增量缓存更新(检测上游数据变更)
  • 开发缓存清理策略(自动淘汰过期数据)

长期

  • 多节点分布式缓存共享
  • 集成到 DiVoProtein 管线中作为标准数据入口
  • 开放 Provider 插件接口,支持第三方数据源接入

License

Proprietary — All rights reserved by DiVo Gen²AI.