2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
tar+zstd 很难被超越。
因此,我不再尝试将其作为字节压缩器来超越。
相反,我尝试了另一种方法:
先压缩结构,再压缩字节。
这就是 Metarc 背后的理念,它是一个用 Go 语言编写的小型实验性归档工具。
它探索了我所称的元压缩:在应用标准压缩器(如 zstd)之前,减少源代码树中的结构和语义冗余。
在我当前的源代码基准测试数据集中,Metarc 在每个经过测试的代码库中生成的归档文件都比 tar+zstd 更小。
问题所在:tar 看到的是流,而不是项目
传统的归档流程通常围绕一个简单的理念构建:
目录树 → tar 流 → 压缩器
`
这种方法稳健、可移植、简单,且经过了实战检验。
但这也意味着,当压缩开始时,丰富的源代码树已经被扁平化为字节流。
源代码仓库不仅仅是字节。
它包含结构:
- 重复的文件
- 重复的许可证文本
- 常见的样板代码
- 生成的内容
- 重复的 JSON 结构
- 具有可预测模式的日志
- 跨目录的相似文件
- 在一切变成流之前更容易看到的语义冗余
当然,字节级压缩器仍然可以发现许多模式。
zstd 非常出色。
但当输入仍然是文件树时,某些冗余更容易被检测到。
这就是 Metarc 的核心理念。
什么是元压缩?
元压缩意味着在字节流级别之上压缩信息。
不仅仅问:
我们如何压缩这个字节序列?
Metarc 还会问:
这个目录树包含什么,在将其转换为流之前存在哪些冗余?
目前的方法大致如下:
文本
源代码树
→ 扫描文件
→ 分析内容
→ 检测冗余
→ 应用结构/语义转换
→ 存储目录 + 数据块
→ 应用 zstd
→ .marc 归档文件
Metarc 并不试图取代 zstd。
它试图为 zstd 提供更好的输入。
当前结果
在当前的基准测试数据集中,Metarc 在每个经过测试的源代码仓库中生成的归档文件都比 tar+zstd 更小。
以下是一些示例:
| 代码库 | tar+zstd | marc | 增益 |
|---|---|---|---|
| Kubernetes | 81.1M | 75.3M | 小 7.2% |
| React | 18.5M | 17.3M | 小 6.4% |
| Redis | 8.9M | 8.4M | 小 5.6% |
| NumPy | 18.4M | 17.7M | 小 3.8% |
在经过测试的代码库中,与 tar+zstd 相比,目前的增益约为 3–7%。
这听起来可能微不足道。
但在真实的源代码仓库中能够超越 tar+zstd 已经很有趣,因为最终的压缩步骤仍然使用标准压缩器。
差异来自于最终压缩步骤之前所发生的事情。
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。