Zstandard(缩写为Zstd)是一种新的无损压缩算法,旨在提供快速压缩,并实现高压缩比。它既不像LZMA和ZPAQ那样追求尽可能高的压缩比,也不像LZ4那样追求极致的压缩速度。
下面是一组基准测试数据:
压缩算法名称 | 压缩比 | 压缩速度(MB/s) | 解压速度(MB/s) |
3.099 | 18 | 275 | |
Zstd | 2.872 | 201 | 498 |
2.73 | 58 | 250 | |
2.72 | 26 | 1720 | |
QuickLZ 1.5.1b6 | 2.237 | 323 | 373 |
LZO 2.06 | 2.106 | 351 | 510 |
Snappy 1.1.0 | 2.091 | 238 | 964 |
2.084 | 370 | 1590 | |
LZF 3.6 | 2.077 | 220 | 502 |
(环境:Core i5-4300U @ 1.9GHZ;基准测试程序:开源程序fsbench 0.14.3)
从上表可以看出,Zstd的压缩比和压缩速度都比较高,而且解压速度大约为每核500MB/s。
Zstd的压缩速度可以根据不同的情况进行配置。在上述测试中,它提供了大约每核200MB/s的速度,可以用于一些实时压缩场景。同时,与LZ4类似,它可以提供平衡压缩比和压缩时间的衍生算法,并且不影响解压性能。
Zstd还有一个特点是内存需求可配置。这使它可以适应内存配置低或者服务器并行处理多个请求的情况。此外,它采用了“有限状态熵(Finite State Entropy,缩写为FSE)”编码器。该编码器是由Jarek Duda基于ANS理论开发的一种新型熵编码器,旨在与“霍夫曼编码器(Huffman encoder)”和“算数编码器(Arithmetic encoder)”相竞争。
另据Cyan4973项目创建者Yann Collet介绍,虽然Zstd是一个速度很快的压缩/解压算法,但它并没有进入LZ4的适用范围。在一项基准测试中(测试方法见这里),Collet得出了这样的结论:
当传输速度高于50MB/s时,LZ4是更好的选择;而当传输速度介于0.5MB/s和50MB/s时,Zstd在速度上领先于其它算法。
此外,在回复用户评论时,Collect比较了Zstd与lzham:
根据我的理解,它们的设计出发点不同。Lzham来源于LZMA……以离线压缩场景作为衡量标准……而Zstd的基本原则更像Zlib,但主要有三点变化:
- FSE代替霍夫曼编码器;
- 不限匹配尺寸;
- 偏移量可重复。
最后,请读者朋友们注意:Zstd开发尚处于起步阶段,本文的一些测试结果也只是早期的测试结果,其实现将会随着时间的推移继续改进和提高,尤其是在项目创建的第一年里。