停止为获取单个文件而解压整个压缩包——全新 ARCX

发布: (2026年3月20日 GMT+8 04:43)
3 分钟阅读
原文: Dev.to

Source: Dev.to

概览

大多数归档格式会让一个简单的任务变得不必要地昂贵:你只需要一个文件,却必须下载并解压全部内容。
我构建了 ARCX,一种旨在解决此问题的压缩归档格式。

ARCX 将跨文件压缩(如 tar+zstd)与索引随机访问(如 ZIP)相结合,这样你可以在毫秒级别内从大型归档中检索单个文件,而无需解压其余部分。

GitHub:

安装

cargo install arcx

基准测试(基于 5 组真实数据集)

数据集ARCX 读取字节数TAR+ZSTD 读取字节数减少幅度
Python ML326 KB63.1 MB低 198 倍
Build Artifacts714 KB140.4 MB低 202 倍
其他 3 个数据集≈ 200 ms 每次从约 200 MB 归档中检索单个文件相比 tar+zstd 读取数据量最高降低 200 倍
压缩开销tar+zstd 相差约 3 %

使用场景

  • CI/CD 流水线(制品检索)
  • 支持部分读取的云存储
  • 大型代码库
  • 包注册表

现代系统往往只需要 单个文件,且立即可用,而不是整个归档。

ARCX 工作原理

  1. 块级压缩 – 归档被划分为独立压缩的块。
  2. 二进制清单索引 – 存放在归档末尾,映射每个文件到其块的偏移。
  3. 直接偏移读取 – 客户端可以:
    • 在索引中查找文件。
    • 跳转到对应块。
    • 只解压该块。

这将扫描或完整解压归档的过程替换为一次简单的清单查找加单块读取。

格式对比

格式压缩强度访问速度
ZIP较弱快速
tar+zstd缓慢
ARCX快速

限制与未来工作

  • ARCX 不适用于流式传输(如 tar)。归档必须完整后才能读取,因为清单写在末尾。
  • 远程/S3 范围读取工作流尚未完成完整基准测试。
  • 元数据/索引开销仍在为极大量文件进行优化。
  • Rust 中的完整提取基准测试仍在进行中。

仍处于早期阶段——欢迎反馈。

0 浏览
Back to Blog

相关文章

阅读更多 »