停止为获取单个文件而解压整个压缩包——全新 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 ML | 326 KB | 63.1 MB | 低 198 倍 |
| Build Artifacts | 714 KB | 140.4 MB | 低 202 倍 |
| 其他 3 个数据集 | ≈ 200 ms 每次从约 200 MB 归档中检索单个文件 | — | 相比 tar+zstd 读取数据量最高降低 200 倍 |
| 压缩开销 | 与 tar+zstd 相差约 3 % | — | — |
使用场景
- CI/CD 流水线(制品检索)
- 支持部分读取的云存储
- 大型代码库
- 包注册表
现代系统往往只需要 单个文件,且立即可用,而不是整个归档。
ARCX 工作原理
- 块级压缩 – 归档被划分为独立压缩的块。
- 二进制清单索引 – 存放在归档末尾,映射每个文件到其块的偏移。
- 直接偏移读取 – 客户端可以:
- 在索引中查找文件。
- 跳转到对应块。
- 只解压该块。
这将扫描或完整解压归档的过程替换为一次简单的清单查找加单块读取。
格式对比
| 格式 | 压缩强度 | 访问速度 |
|---|---|---|
| ZIP | 较弱 | 快速 |
| tar+zstd | 强 | 缓慢 |
| ARCX | 强 | 快速 |
限制与未来工作
- ARCX 不适用于流式传输(如
tar)。归档必须完整后才能读取,因为清单写在末尾。 - 远程/S3 范围读取工作流尚未完成完整基准测试。
- 元数据/索引开销仍在为极大量文件进行优化。
- Rust 中的完整提取基准测试仍在进行中。
仍处于早期阶段——欢迎反馈。