我需要选择一种压缩算法

问题描述 投票:0回答:6

我需要选择一种压缩算法来压缩一些数据。我不知道我将提前压缩的数据类型(将其想象为有点像 WinRAR 程序)。

我听说过以下算法,但我不知道应该使用哪一种。谁能发布一个简短的优点和缺点列表?对于我的应用来说,首要考虑的是解压速度;第二要务是节省空间。压缩(不是解压)速度无关紧要。

  • 放气
  • 内爆
  • 朴素的霍夫曼
  • bzip2
  • lzma
algorithm language-agnostic compression
6个回答
11
投票

我运行了一些压缩 .tar 的基准测试,其中包含高熵数据和文本的组合。这些是结果:

名称 - 压缩率* - 减压时间
7zip - 87.8% - 0.703 秒
bzip2 - 80.3% - 1.661s
gzip - 72.9% - 0.347s
lzo - 70.0% - 0.111s

*越高越好

由此我得出的结论是,算法的压缩率取决于它的名称;按字母顺序排列的第一个将是具有最佳压缩率的那个,依此类推。

因此我决定将

lzo
重命名为
1lzo
。现在我拥有有史以来最好的算法。


编辑:值得注意的是,不幸的是,

lzo
是唯一一个拥有非常严格的许可证(GPL)的:(


5
投票

如果您需要高解压速度,那么您应该使用LZO。它的压缩速度和比率都不错,但它的解压速度很难被超越。


5
投票

在 Linux 内核中对此有很好的解释(来自包含的内容):

  • Deflate (gzip) - 快速、最差的压缩
  • bzip2 - 慢速、中等压缩
  • lzma - 非常慢的压缩,快速解压(但比 gzip 慢),最好的压缩

我没有使用过其他的,所以很难说,但算法的速度可能很大程度上取决于架构。例如,有研究表明 HDD 上的数据压缩可以加速 I/O,因为处理器比磁盘快得多,所以这是值得的。然而,这很大程度上取决于瓶颈的大小。

类似地,一种算法可能会大量使用内存,这可能会也可能不会导致问题(12 MiB - 它是很多还是很小?在嵌入式系统上它很多;在现代 x86 上它只是内存的一小部分)。


2
投票

看看7zip。它是开源的,包含 7 种独立的压缩方法。我们所做的一些小测试表明,7z 格式提供的结果文件比 zip 小得多,而且对于我们使用的示例数据来说,它的速度也更快。

由于我们的标准压缩是zip,所以我们还没有考虑其他压缩方法。


1
投票

要获得文本数据的全面基准测试,您可能需要查看大文本压缩基准测试

对于其他类型,这可能具有指示性


0
投票

当今最快的压缩算法之一是LZ4,据报道在解压过程中达到了RAM速度限制。

另一方面,通常提供最佳压缩比率的算法是LZMA2,由xz7z使用。但是,有两个注意事项:

Zstandard提供了良好的平衡,速度很快,但也可以提供与LZMA竞争的比率。

当今另一个流行的选择是

Brotli,它更注重速度而不是实现最高压缩比。最近,HTTP

 协议中添加了对 Zstd 和 Brotli 
Content-Encoding 的支持。

基准测试中的获胜者曾经是

PAQ,但是它没有被广泛使用,而且我找不到它的积极维护的实现。

© www.soinside.com 2019 - 2024. All rights reserved.