【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

  • 2015-01-29
  • 本文字数:976 字

    阅读完需:约 3 分钟

Zstandard (缩写为 Zstd)是一种新的无损压缩算法,旨在提供快速压缩,并实现高压缩比。它既不像 LZMA ZPAQ 那样追求尽可能高的压缩比,也不像 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 开发尚处于起步阶段,本文的一些测试结果也只是早期的测试结果,其实现将会随着时间的推移继续改进和提高,尤其是在项目创建的第一年里。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-01-29 19:5860033
用户头像

发布了 1008 篇内容, 共 372.3 次阅读, 收获喜欢 340 次。

关注

评论

发布
暂无评论
发现更多内容

jackson学习之八:常用方法注解,复习指南

Java 程序员 后端

Java 反射:框架设计的灵魂,springboot运行原理

Java 程序员 后端

Java 高并发之设计模式,深入linux内核架构mobi

Java 程序员 后端

Java-Parallel GC介绍,springmvc面试题高级

Java 程序员 后端

jackson学习之八:常用方法注解(1),java虚拟机实现原理

Java 程序员 后端

Java 虚拟机1:什么是 Java(1),DubboSPI及自适应扩展原理

Java 程序员 后端

Java 虚拟机1:什么是 Java,太完整了

Java 程序员 后端

java8实战读书笔记:初识Stream、流的基本操作,nginx架构原理

Java 程序员 后端

java 数据结构与算法之稀疏矩阵算法,BTAJ面试有关散列(哈希)表的面试题详解

Java 程序员 后端

Jaeger知识点补充,java菜鸟教程面向对象

Java 程序员 后端

Java transient关键字的使用,java商城项目面试

Java 程序员 后端

Java 世界里的垃圾回收规则你搞懂了吗?,springboot输出视频流

Java 程序员 后端

Java 低代码开发平台“光”发布 2,javapdf模板下载百度云

Java 程序员 后端

java8实战读书笔记:Lambda表达式语法与函数式编程接口

Java 程序员 后端

JavaFx:窗口切换和ListView以及TableView的值绑定,docker面试题

Java 程序员 后端

InnoDB(4,java中级工程师面试题

Java 程序员 后端

JAVA 微信小程序 解密 用户信息encryptedData,linux系统架构与目录解析

Java 程序员 后端

Java 里面的异常,java语言程序设计教程pdf

Java 程序员 后端

Java-进阶:集合框架1(1),java分布式系统面试题

Java 程序员 后端

java-集合-Map(双列)——迪迦重制版(1),关于线程池的五种实现方式

Java 程序员 后端

JavaWeb Ajax详解,linux操作系统基础教程安俊秀课后答案

Java 程序员 后端

Java this关键字详解(3种用法),Java程序员最新职业规划

Java 程序员 后端

Java 多线程 —— 定时器,svnlinux使用教程

Java 程序员 后端

Java-进阶:集合框架1,java三个技术平台

Java 程序员 后端

java-集合-Map(双列)——迪迦重制版,zookeeper面试

Java 程序员 后端

James邮件服务器,高级java工程师简历模板

Java 程序员 后端

Java 方法的使用(方法重载、形参和实参调用关系,java高级面试最新

Java 程序员 后端

InnoDB(3,韩顺平java从入门到精通课件

Java 程序员 后端

如何编写 Go 包

baiyutang

golang 11月日更

JAVA 获取系统日期时间,java基础百度云

Java 程序员 后端

一行代码爬取微博热搜数据

老表

爬虫 python学习 11月日更

Zstandard:一种新的无损压缩算法_语言 & 开发_谢丽_InfoQ精选文章