微信号:infoqchina

介绍:有内容的技术社区媒体

Zstandard:一种新的无损压缩算法

2015-02-06 12:29 InfoQ


Zstandard(缩写为Zstd)是一种新的无损压缩算法,旨在提供快速压缩,并实现高压缩比。它既不像LZMAZPAQ那样追求尽可能高的压缩比,也不像LZ4那样追求极致的压缩速度。


下面是一组基准测试数据:


环境: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,但主要有三点变化:


1,FSE代替霍夫曼编码器;


2,不限匹配尺寸;


3,偏移量可重复。


最后,请读者朋友们注意:Zstd开发尚处于起步阶段,本文的一些测试结果也只是早期的测试结果,其实现将会随着时间的推移继续改进和提高,尤其是在项目创建的第一年里。



 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 程序员/开发者的时间都去哪了? PingCAP 第10期 NewSQL Meetup 每个人都该懂点编程 JAVA-CAS简介以及ABA问题 Android移动第三方SDK使用分析报告(2016年5月)