数据压缩算法.md

数据压缩

1.常见的各种压缩算法库

  1. zstd

    zstd算法(全称 Zstandard)是由FaceBook在2016年开发的一种无损压缩算法。由C语言编写,有java的实现,完全开源。zstd自带多线程压缩,充分利用多核CPU,让压缩速度提升数倍。原理是把数据 等分 成多份,并行压缩出一个单帧zstd数据,可以设置 每份的大小、重叠部分的大小。多线程压缩可以用1秒把1GiB数据压缩到500MiB,网络传输会快很多。但不支持多线程解压。不过解压速度已经很快了,低压缩等级时可以比一些SSD快。解压速度可以看zstd网站首页的表格。

  2. zlib

    是一个用于数据压缩的软件库,也是一种数据格式。 zlib 由Jean-loup Gailly和Mark Adler编写,是他们的gzip中使用的DEFLATE压缩算法的抽象文件压缩程序。

  3. brotli

    Brotli是一种新的开源数据压缩算法,比现有技术提供更好的压缩率。它是由谷歌开发的,于2015年发布。

    Brotli是为现代网络设计的,其中数据压缩对减少网络带宽消耗至关重要。该算法是基于两种现有技术的巧妙结合。Lempel-Ziv编码和Huffman编码。通过同时使用这两种技术,Brotli实现了比单独使用任何一种技术都高得多的压缩率。

  4. quicklz

    QuickLZ号称是世界上速度最快的压缩库,速度可达到单核308 Mbyte/s, 使用简单,易于集成。这个 quicklz 库是RT-thread针对官方qiuicklz的C库的移植

  5. lzo1x

    LZO 非常适合进行数据的实时压缩解压处理,这就是说他更关心操作速度,而不是压缩比例。

    LZO 使用 ANSI C 语言编写,并且压缩后的数据也被设计为可以跨平台使用的格式。

    LZO 拥有如下的特点:

    • 解压速度很快,并且很简单;
    • 解压时不需要内存支持;
    • 压缩的速度还不错;
    • 压缩时只需要 64 KiB 的内存支持;
    • 压缩比例可以根据需要调节,而这并不影响解压的效率,提高压缩比例自然会降低压缩速度;
    • 压缩包含了很多的压缩级别,提供很多选择;
    • 提供只需要 8 KiB 内存支持的压缩级别;
    • 提供线程安全;
    • 提供无损压缩;

    LZO提供多重压缩,和复原解压;

  6. lzf(2008停更)

    LibLZF 是一个非常小的数据压缩库。它仅由两个 .c 和两个 .h 文件组成,很容易合并到您自己的程序中。压缩算法非常非常快,但仍然是用可移植的 C 语言编写的。

    最后同样重要的是,它是免费使用的,与大多数其他 GPL 下的压缩库不同,该库使用 BSD 类型许可证,因此您可以放心地将其包含在您的程序中。

    特点:

    • 代码量小(不到 500 行,包括头文件和文档)。
    • 非常快的压缩速度,可与直接复制循环相媲美,特别是对于基本上处于(未优化的)memcpy 速度的解压缩。通过牺牲百分之几的压缩比,压缩速度可以提高20%。
    • 中等压缩率 - 通常可以预期典型二进制数据的压缩率为 40-50% 左右
    • 易于使用(只有两个功能,没有附加状态)
    • 高度可移植(用 C 语言编写)
    • 可调,请参阅发行版中的 lzfP.h 文件,根据您的需要定制 liblzf。生成的压缩块可以通过任何 liblzf 版本解压缩,无论用于压缩的选项如何。
    • 可免费使用(BSD 类型许可证)
    • Perl 接口在 CPAN 上可用(压缩::LZF)
  7. lz4(与zstd同作者)

    LZ4是一种无损数据压缩算法,着重于压缩和解压缩速度。它属于面向字节的LZ77压缩方案家族。该算法提供一个比LZO算法稍差的压缩率——这逊于gzip等算法。但是,它的压缩速度类似LZO——比gzip快几倍;而解压速度显著快于LZO。

  8. snappy

​ snappy是google开源的压缩算法实现,通过测试表明snappy拥有极高的性能表现,但google并没有发表相关论文,可以认为snappy是一个工业算法。snappy借鉴了LZ77的思路,LZ77的匹配过程时间复杂度过高,google对其做了许多优化。

2.各种压缩算法性能比较

image-20230627113501684

这张图出自zstd自家网站。

参考文献:

zstd,未来可期的数据压缩算法 https://www.jianshu.com/p/71eb3071d3e0

Zstd 压缩算法https://blog.csdn.net/guijiaoba/article/details/118358436

zstd官网:https://facebook.github.io/zstd/

Python使用zstd压缩算法https://www.cnblogs.com/animalize/p/14290701.html

Zlib压缩算法:LZ77、LZ78、霍夫曼编码、滑动窗口、Rabin-Karp算法、哈希链、I/O缓冲区https://blog.csdn.net/Rong_Toa/article/details/108986430