文档章节

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

lwaif
 lwaif
发布于 2015/10/09 23:05
字数 672
阅读 5093
收藏 7

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

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

 

压缩算法名称

压缩比

压缩速度(MB/s)

解压速度(MB/s)

zlib 1.2.8 -6

3.099

18

275

Zstd

2.872

201

498

zlib 1.2.8 -1

2.73

58

250

LZ4 HC r127

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

LZ4 r127

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

本文转载自:

lwaif
粉丝 6
博文 146
码字总数 31243
作品 0
深圳
私信 提问
加载中

评论(2)

l
lblin
追求寂寞
土卫十六
土卫十六
那这个算法到底在追求什么??
快速实时压缩算法 - Zstandard

Zstandard(zstd)是 Facebook 开源的一种快速无损压缩算法,以 zlib 级为目标的实时压缩场景和更好的压缩比。它提供了非常宽范围的压缩/速度折衷,同时支持非常快的解码器。它还为小数据提供...

匿名
2016/12/27
0
6
Facebook 开源 Zstandard 算法及 MyRocks 存储引擎

今天,Facebook 宣布其开源了自家的 Zstandard 压缩算法。这个无损的压缩技术致力于取代已存在的诸如 zlib 这种依赖过时的技术 Deflate compression algorithm 的库。除了 Zstandard 压缩算法...

局长
2016/09/01
3.8K
10
Zstandard 1.3.0 发布,新一代快速无损压缩算法

Zstandard(zstd)是 Facebook 开源的一种快速无损压缩算法,以 zlib 级为目标的实时压缩场景和更好的压缩比。它提供了非常宽范围的压缩/速度折衷,同时支持非常快的解码器。它还为小数据提供...

王练
2017/07/07
1K
2
Facebook 开源 Zstandard 压缩算法以及 MyRocks 存储引擎

今天, Facebook以开源的形式发布了其Zstandard压缩算法。无损压缩技术目标是替换像zlib这样的基于Deflate压缩算法的过时的库。除了Zstandard, Facebook也以开源的形式释放出了它的MyRocks...

oschina
2016/09/01
1K
0
速度极大提升,Arch Linux 计划将 zstd 作为默认压缩算法

过去几周,Arch Linux 维护人员比较了不同的压缩算法,最终计划使用 zstd 取代 devtools 中的默认压缩算法。 当前的压缩方法是,它是单线程的,速度很慢,所以团队希望用更快的算法来将其替换...

h4cd
03/25
0
1

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
2
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
3
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部