Facebook 开源的无损压缩算法:zstd

createh511小时前技术教程6

Zstandard (也被称为zstd )是一款免费的开源,快速实时数据压缩程序,具有更好的压缩比,由Facebook开发。

它是用C语言编写的无损压缩算法 (在Java中有一个重新实现)。因此它是一个本地Linux程序。

当需要时,它可以将压缩速度交换为更高的压缩比率(压缩速度与压缩比率的权衡可以通过小增量来配置),反之亦然。 它具有小数据压缩的特殊模式,称为字典压缩,可以从任何提供的样本集中构建字典。 它带有一个命令行实用程序,用于创建和解码.zst.gz .xz .lz4 文件。

重要的是,Zstandard拥有丰富的API集合,支持几乎所有流行的编程语言,包括Python,Java,JavaScript,Nodejs,Perl,Ruby,C#,Go,Rust,PHP,Switft等等。


Benchmarks

作为参考,一些快速压缩算法在一个运行 Arch Linux (Linux 版本5.5.11-arch1-1)的服务器上进行了测试和比较,使用了 Core i9-9900K CPU@5.0 GHz,使用 lzbench,一个由@inikep 在西里西亚压缩语料库上用 gcc 9.3.0编译的开源内存基准测试。


其中--fast代表负压缩级别,提供更快的压缩和解压缩度,以换取相对于1级的压缩比损失。

小型数据压缩的案例

前面的图表提供的结果适用于典型的文件和流场景(几MB的大小)。


要压缩的数据量越小,压缩就越困难。这个问题在所有的压缩算法中都很常见,原因是压缩算法从过去的数据中学习如何压缩未来的数据。


为了解决这个问题,Zstd 提供了一种训练模式,可以用来对选定类型的数据进行算法调优。通过提供一些样本(每个样本一个文件)来实现 Zstandard 的训练。这种训练的结果存储在一个名为“ dictionary”的文件中,必须在压缩和解压缩之前加载该文件。使用这本字典,可以在小数据上实现的压缩比/值大大提高。


下面的示例使用 github-users 示例集,该示例集是从 github public API 创建的。它由大约10K 条记录组成,每条记录重约1KB。



这些压缩增益的实现,同时提供更快的压缩和解压缩速度。


如果在一组小数据样本中存在某种相关性,则训练是有效的。一个字典的数据特定性越强,它的效率就越高(没有通用的字典)。因此,为每种类型的数据部署一个字典将带来最大的好处。字典增益在前几个 KB 中最有效。然后,压缩算法将逐渐使用先前解码的内容,以更好地压缩文件的其余部分。


那么你的应用中有需要用到压缩场景的吗?不妨试试Facebook的这个开源库,看看能否给你的压缩过程提提速!

关注我,发送私信“zstd”获取仓库地址!

相关文章

常见的序列化框架及Protobuf原理

享学课堂作者:逐梦々少年简书ID:逐梦々少年转载请声明出处!上次我们详细的学习了Java中的序列化机制,但是我们日常开发过程中,因为java的序列化机制的压缩效率问题,以及序列化大小带来的传输的效率问...

Spring Boot 如何压缩JSON数据并且将其存储到Redis中?

想要在SpringBoot中实现JSON数据的压缩并存储到Redis中进行数据持久化处理,我们可以通过如下的步骤来实现。依赖配置首先需要在POM文件中添加上Spring Data Redis 和 JS...

UG NX12.0安装教程

软件获取方式:评论、转发、收藏后私信。软件介绍 UG12.0是集成产品设计、工程与制造于一体的解决方案,包含世界上最强大、最广泛的产品设计应用模块,具有高性能的机械设计和制图功能,为制造设计提供了高性...

Nginx配置文件详解与优化建议

1、概述今天来详解一下Nginx的配置文件,以及给出一些配置建议,希望能对大家有所帮助。2、nginx.conf1)配置文件位置nginx 安装目录的 conf 文件夹下,例如:/usr/local/...

推荐7个宝藏压缩网站,图片、视频、动图、文档压缩,一网打尽

大家应该都有遇到过文件过大的情况吧,由于文件过大我们无法对文件进行其他操作。这样就显得有些浪费资源,而且会直接降低我们的工作效率。那么今天哒哒想要分享给大家几个压缩网站,图片压缩、视频压缩、GIF压缩...

Linux技巧:介绍 tar 命令打包、压缩、和加解密的用法

在 Linux 中,可以使用 tar 命令把多个文件、目录打包到指定的归档文件里面。要注意的是,tar 命令默认只是把多个文件打包放到一起,不会对文件进行压缩,所以打包后的文件大小并不会变小,由于添加...