结构优于字节:Metarc 如何在真实代码上超越 tar+zstd

发布日期:2026-05-06 10:02:47   浏览量 :2
发布日期:2026-05-06 10:02:47  
2

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 已经很有趣,因为最终的压缩步骤仍然使用标准压缩器。

差异来自于最终压缩步骤之前所发生的事情。

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部