使用分片的 repodata 实现快 50 倍的解决方案

主要观点:

  • Pixi 采用新方法获取 repodata 可使许多复杂 conda 环境求解速度提升多达 50 倍,不仅加快日常使用还提升 CI 工作流效率,本文深入探讨技术细节。
  • 介绍了获取 repodata 的不同方法及其优缺点,如仅存储最新版本、压缩、JLAP 等。
  • 提出新的分片索引方法,将 repodata 拆分为索引和按包名划分的分片,能快速下载和处理,支持各种要求。
  • 实现该方法并在 rattler 和 pixi 中进行测试,结果表明在热缓存和冷缓存情况下都显著优于先前方法,且在慢网络连接下更优。
  • 提出 Conda Enhancement Proposal 希望被更广泛的 conda 生态系统接受,介绍在 pixi 中使用的方法及如何帮助推广。

关键信息:

  • 常见 conda 频道如 conda-forge 规模大,repodata.json文件增长快。
  • 先前方法如仅存储最新版本可减小文件大小但有局限性,压缩可减少下载大小但仍需定期下载,JLAP 可仅下载增量更新但处理大量 JSON 慢。
  • 分片索引方法基于新包添加少更新包的特点,将repodata.json拆分为索引和分片,通过内容寻址可高效缓存,测试结果显示性能优异。
  • 希望 CEP 被接受,介绍在 pixi 中使用的方式及如何帮助推广该方法。

重要细节:

  • repodata.json文件包含渠道中所有包的信息,不同平台有不同大小。
  • 新方法中分片以内容寻址方式存储,索引编码包名与分片哈希及元数据,文件大小随唯一包名数量增长而非单个包。
  • 测试在不同网络连接下比较新方法与其他方法的性能,新方法在各种情况下都表现出色。
  • CEP 包含对 repodata 的改进,正在与 Anaconda 合作在conda-index中实现分片 repodata 创建。在 pixi 中使用只需将conda-forge通道替换为https://prefix.dev/conda-forge
阅读 14
0 条评论