网站搜索

zstd - Facebook 使用的快速数据压缩算法


Zstandard(也称为zstd)是一款免费开源、快速实时数据压缩程序,具有更好的压缩比,由Facebook开发。它是一种用C编写的无损压缩算法(在Java中有重新实现)——因此它是一个本地Linux程序。

另请阅读:Linux 中的 10 个 7zip(数据压缩)命令示例

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

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

它被积极用于压缩 Facebook 中多种格式和用例的大量数据; Amazon Redshift 数据仓库等服务; Hadoop、Redis 等数据库; Tor 网络和许多其他应用程序(包括游戏)。

以下结果是通过使用开源内存基准测试工具 lzbench 在运行 Linux Debian 的服务器上进行多项快速压缩算法测试而获得的。

如何在Linux中安装Zstandard压缩工具

要在 Linux 发行版上安装 Zstandard,您需要从源代码编译它,但在此之前,您首先需要使用发行版包管理器在系统上安装必要的开发工具,如图所示。

sudo apt update && sudo apt install build-essential		#Ubuntu/Debian
yum group install "Development Tools" 			#CentOS/REHL
dnf groupinstall "C Development Tools and Libraries"		#Fedora 22+

安装完所有需要的开发工具后,现在您可以下载源代码包,移至本地存储库目录,构建二进制文件并安装它,如图所示。

cd ~/Downloads
git clone https://github.com/facebook/zstd.git
cd zstd
make
sudo make install 

安装Zstandard后,现在我们可以在下一节中进一步学习Zstd命令示例的一些基本用法。

了解 Linux 中的 10 个 Zstd 命令用法示例

Zstd 的命令行语法通常与 gzipxz 工具相似,但有一些差异。

1. 要创建 .zst 压缩文件,只需提供文件名即可对其进行压缩,或者使用 -z 标志也意味着压缩,即默认操作。

zstd etcher-1.3.1-x86_64.AppImage 
OR
zstd -z etcher-1.3.1-x86_64.AppImage 

2. 要解压缩 .zst 压缩文件,请使用 -d 标志或 unzstd 实用程序,如图所示。

zstd -d etcher-1.3.1-x86_64.AppImage.zst 
OR
unzstd etcher-1.3.1-x86_64.AppImage.zst 

3.操作后删除源文件,默认情况下,压缩或解压成功后不会删除源文件,要删除源文件,请使用--rm选项。

ls etcher-1.3.1-x86_64.AppImage
zstd --rm  etcher-1.3.1-x86_64.AppImage
ls etcher-1.3.1-x86_64.AppImage

4. 要设置压缩级别,zstd 有许多操作修饰符,例如您可以将压缩级别指定为 -6(数字 1-19,默认为3)如图所示。

zstd -6 --rm etcher-1.3.1-x86_64.AppImage

5.要设置压缩速度,zstd有一个压缩速度比1-10,默认压缩速度为1。您可以使用--fast选项以压缩率换取压缩速度,数字越大压缩速度越快。

zstd --fast=10 etcher-1.3.1-x86_64.AppImage

6. 要显示有关压缩文件的信息,请使用 -l 标志,例如,该标志用于显示有关压缩文件的信息。

zstd -l etcher-1.3.1-x86_64.AppImage.zst

7. 要测试压缩文件的完整性,请使用 -t 标志,如图所示。

zstd -t etcher-1.3.1-x86_64.AppImage.zst

8. 要启用详细模式,请使用 -v 选项。

zstd -v -5 etcher-1.3.1-x86_64.AppImage

9. 要使用其他文件压缩或解压缩格式,例如 gzip、xz、lzma 和 lz4,请使用 --format=FORMAT,如图所示。

zstd -v --format=gzip etcher-1.3.1-x86_64.AppImage
zstd -v --format=xz  etcher-1.3.1-x86_64.AppImage

10. 要将 zstd 进程优先级设置为实时,您可以使用选项–priority=rt,如图所示。

$zstd --priority=rt etcher-1.3.1-x86_64.AppImage

-r 标志指示 zstd 对字典进行递归操作。通过查阅 zstd 手册页,您可以找到许多有用的高级选项,以及如何阅读或创建字典。

man zstd

Zstandard Github 存储库:https://github.com/facebook/zstd

Zstandard是一种快速实时、无损数据压缩算法和压缩工具,提供高压缩比。尝试一下并分享您的想法或通过下面的反馈表提出问题。