xz、gzip 和 bzip2 中哪种压缩算法最有效?

xz、gzip 和 bzip2 中哪种压缩算法最有效?

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

答案1

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

压缩:

1:Gzip

2:Xz

3:Bzip2(运行过程中,我的风扇不停地转,说明我的 Athlon II 相当吃力)

减压:

1:Xz

2:Gzip

3:Bzip2

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

Xz 是最佳的全面压缩格式,而 Gzip 的速度非常快。Bzip2 的压缩率不错,不过最好用 xz 来代替。

答案2

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

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.1秒@3.7

  • lz4:1.3秒@2.8

  • xz:32.2秒@5.43

  • xz -e : 6m40 @ 7.063

  • xz:4分51秒@7.063

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

如果你迫切需要节省字节,那么对于像内核源代码这样的文本文件,最大压缩级别 (9) 的 xz 效果最好。但是,它很长,占用大量内存。

在需要最小化时间和空间影响时,gzip 是一个很好的选择。我会用它对生产环境进行每日手动备份。

答案3

我对 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

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

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

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

答案4

此外:当您想要从包含大量重复文件的文件夹结构中压缩 tarball 时,输出大小会有显著差异。

您可以针对您的大型 tarball(在我的情况下有许多重复文件)情况调整压缩。这意味着:

  • 使用在实际压缩之前进行重复数据删除的工具,如 squashfs 或 libwim
  • 使用可以创建具有可靠机制的档案的工具,如 7zhttps://en.wikipedia.org/wiki/Solid_compression
  • 并使用 xz/gzip/bzip2/etc 的 dictionary-size 和 solid-chunk-size(如果可用)。这对具有重复部分的大型文件有显著影响。

我的示例数据集是 1GB 的原始数据。几个 dll 文件,其中很多是重复的。使用简单压缩,我得到了大约 150MB 的 xz/gz/etc 档案。

我最好的结果是 9 秒内传输 40MB wimcapture data out.wim --compress=none --solid --solid-chunk-size=1M

在研究过程中,我还偶然发现https://github.com/mhx/dwarfs值得一看。它结合了现代压缩、重复数据删除和速度。

相关内容