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开发尚处于起步阶段,本文的一些测试结果也只是早期的测试结果,其实现将会随着时间的推移继续改进和提高,尤其是在项目创建的第一年里。
来源:oschina
链接:https://my.oschina.net/u/1023846/blog/515010