在 xz、gzip 和 bzip2 之间,哪种压缩算法最有效?

Nat*_*055 21 compression gzip tar bzip2 xz

在 xz、gzip 和 bzip2 之间,哪种压缩算法在压缩相当大的 tarball 时提供最小的文件大小和最快的速度?

Nat*_*055 16

在我的压力测试中,我使用列出的三种格式压缩了 464 兆字节的数据。Gzip 返回了一个 364 MB 的文件。Bzip2 返回了一个 315 MB 的文件。Xz 返回了一个 254 MB 的文件。我还做了一个简单的速度测试:

压缩:

1:压缩包

2:XZ

3:Bzip2(我的风扇在这个过程中吹得很厉害,表明我的 Athlon II 相当紧张)

减压:

1:XZ

2:压缩包

3:Bzip2

请注意,所有这些测试都是使用最新版本的 7-Zip 完成的。

Xz 是全面压缩的最佳格式,而 Gzip 非常适合速度。Bzip2 的压缩率不错,尽管应该使用 xz 代替它。

  • 出于好奇,测试文件是什么类型的数据? (8认同)
  • 好研究。您是否尝试过(至少)bzip2 提供的各种压缩级别选项,例如`bzip2 -9 <file>`? (2认同)

Phi*_*ßen 6

这个问题是从2014年开始的,但与此同时也出现了一些趋势。bzip2 已被 xz 淘汰,而zstd可能是大多数工作流程的最佳选择。

  • 最小文件大小:就最小文件大小而言,xz 仍然是最好的。不过,压缩的成本相当高,因此如果这是一个问题的话,更快的压缩算法更适合。pxz实现允许使用多核,这可以稍微加快 xz 压缩速度。

  • 优化快速压缩:当谈到主要针对压缩速度进行优化时的最佳算法时,我认为没有明显的赢家,但lz4是一个很好的候选者。

  • 最佳权衡:如果您需要在不太了解场景的情况下选择一个好的整体算法,那么zstd会很适合。当配置为以与 gzip 相同的速度运行时,它在大小上将轻松击败它。有了更好的压缩率,它会更接近 xz,但速度更快。因此,如果您需要一个适用于广泛用例的可靠算法,zstd 很可能会优于其他算法。它还具有一些高级功能,例如能够构建外部词典,因此还可以针对特定领域进一步优化。

  • 最大兼容性:如果您需要任何应用程序都能够理解的算法,那么 gzip 仍然是最佳默认值。与 zstd 相比,它现在基本上已经过时了,但几乎任何环境都可以使用 gzip,而对 zstd 的支持仍然不存在(2021 年)。它于 2016 年发布,而 gzip 则于 1992 年发布。


小智 5

我认为这篇文章提供了非常有趣的结果。

http://pokecraft.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO

最有效的大小格式是 xz 和 lzma,两者都传递了 -e 参数。

目前最快的算法是 lzop 和 lz4,它们可以在 1.3 秒内产生与 gzip 相差不远的压缩级别,而 gzip 需要 8.1 秒。lz4 的压缩比为 2.8,gzip 的压缩比为 3.7。

以下是我从这篇文章中提取的一些结果:

  • Gzip:8.1s @ 3.7

  • lz4:1.3s @ 2.8

  • xz:32.2s @ 5.43

  • xz -e : 6m40 @ 7.063

  • xz:4 分 51 秒 @ 7.063

因此,如果您真的非常需要速度,lz4 非常棒并且仍然提供 2.8 的压缩比。

如果您迫切需要节省字节,那么最大压缩级别 (9) 的 xz 对内核源代码等文本文件效果最佳。但是,它很长,需要很多内存。

一个需要最小化对时间和空间的影响的好方法是 gzip。这是我用来对生产环境进行每日手动备份的工具。


Mic*_* TM 5

我在 1.1GB Linux 安装 vmdk 映像上做了我自己的基准测试:

rar    =260MB   comp= 85s   decomp= 5s
7z(p7z)=269MB   comp= 98s   decomp=15s
tar.xz =288MB   comp=400s   decomp=30s
tar.bz2=382MB   comp= 91s   decomp=70s
tar.gz =421MB   comp=181s   decomp= 5s
Run Code Online (Sandbox Code Playgroud)

最大所有压缩级别,CPU Intel I7 3740QM,内存 32GB 1600,RAM 磁盘上的源和目标

我一般使用 rar 或 7z 来归档普通文件,例如文档。
对于归档系统文件,我通过 file-roller 或 tar 使用 .tar.gz 或 .tar.xz 和 -z 或 -J 选项以及 --preserve 以使用 tar 进行本地压缩并保留权限(也可以使用 .tar.7z 或.tar.rar 可以使用)

更新:由于 tar 只保留正常权限而不保留 ACL,因此也可以使用普通的 .7z 以及通过 getfacl 和 sefacl 手动备份和恢复权限和 ACL,这似乎是文件归档或系统文件备份的最佳选择,因为它将满保留权限和 ACL,具有校验和、完整性测试和加密功能,唯一的缺点是 p7zip 并非随处可用