当前位置: 首页 > 科技观察

推荐一款Facebook开源的高性能压缩工具Zstd(支持macOS-Linux-Windows全平台)

时间:2023-03-18 02:37:39 科技观察

压缩工具:压缩比高、速度快、性能好一、工具介绍主要介绍zstd工具的功能和性能testing我们称Zstandard或Zstd为快速无损压缩算法,zlib级别的实时压缩方案,压缩比更好。它包含一个非常快的熵阶段,由Huff0和FSE库提供。该项目作为BSD许可库和用于生成和解码.zst格式的库是开源的。性能测试对比Compressor名称RatioCompressionDecompress。zstd1.4.4-12.884520MB/s1600MB/szlib1.2.11-12.743110MB/s440MB/sbrotli1.0.7-02.701430MB/s470MB/squicklz1.5.0-12.238600MB/s800MB/slzo1x2.09-12.106680MB/s950MB/slz41.8.32.101800MB/s4220MB/ssnappy1.1.42.073580MB/s2020MB/slzf3.6-12.077440MB/s930MB/sZstd也可以以压缩速度为代价提供更强的压缩比,SpeedvsRtrade可以通过配置的增量太小,解压缩速度在所有设置中保持不变,并且在所有LZ压缩算法(如zlib或lzma)共享的属性中保持不变。以前的压缩方法适用于典型的文件和二进制压缩方案(MB/GB)。但是,要压缩的数据量越小,就越难压缩。这是所有压缩算法都存在的问题,因为它们从过去的数据中学习如何压缩未来的数据。但是在新数据集开始时,没有“过去”可供参考。为了解决这种情况,Zstd提供了一种新的训练模式,可以针对选定的数据类型调整算法。训练Zstandard是通过提供一些样本(每个样本一个文件)来实现的,训练的结果存储在名为**“字典”**的文件中,必须在压缩和解压缩之前加载。使用这个字典,大大提高了在小数据上可以达到的压缩率。以下示例使用由github公共API创建的github用户样本集。它由大约10K条记录组成,每条记录大约1KB。如果一小组数据样本之间存在某种相关性,则小数据压缩训练案例是有效的。字典对其数据越具体,它的效率就越高(没有通用的字典)。因此,为每种类型的数据部署一个字典将提供最大的好处。词典增益在前几个KB中最有效。然后,压缩算法将逐步使用先前解码的内容来更好地压缩文件的其余部分。使用字典压缩示例#trainingdictionary$zstd--trainFullPathToTrainingSet/*-odictionaryName#compressingwithdictionary$zstd-DdictionaryNameFILE#decompressingwithdictionary$zstd-DdictionaryName--decompressFILE.zst提供客户端工具2.参数命令主要介绍zstd工具安装以及所有参数命令安装方法#Ubuntu$aptinstallzstd#CentOS$yuminstallzstd#编译安装$gitclonehttps://github.com/facebook/zstd.git$cdzstd;make;sudomakeinstall参数命令$zstd--helpusage:zstd[args][FILE(s)][-ofile]参数选项:-#:压缩级别(1-19,默认值为3)-d:解压缩-Dfile:使用文件作为字典-ofile:将结果存储在文件介质中-f:在没有提示的情况下覆盖输出并(解压缩)压缩链接--rm:解压缩成功后删除源文件-k:保存源文件(默认)-h/-H:显示帮助/长帮助和退出高级选项:-V:显示版本号和退出-v:verbosemode-q:silentoutput-c:forcewrite到标准输出-l:zstdarchive中的输出信息--ultra:启用19级以上,最多22级(需要更多内存)-T#:使用多个线程进行压缩(默认:1)-r:操作目录递归地-format=gzip:将文件压缩为.gz格式-M#:asunpacksetmemoryusagelimitdictionarygenerator:--train##:createadictionaryfromasetoftrainingfiles--train-cover[=k=#,d=#,steps=#]:usewithoptionalparameters覆盖算法--train-legacy[=s=#]:有选择地使用legacyalgorithms(default:9)-ofile:"file"是字典名(default:dictionary)--maxdict=#:转换字典Limit为指定大小(默认:112640)--dictID=#:强制字典ID为指定值(默认:random)性能测试参数:-b#:Benchmark测试文件,使用#压缩级别(默认为1)-e#:测试从-bX到#(默认:1)的所有压缩级别-i#:以秒为单位的最小计算时间(默认为3s)-B#:将文件分割成大文件最小为#独立块(默认:无块)--priority=rt:设置进程优先级为实时3.使用技巧主要介绍zstd工具的一些使用实例和参数说明简单用法#CompressafileintoaNewfilewithsuffix.zst#如果命令后没有文件或者文件是-,则读取标准输入$zstdfile#压缩操作后删除源文件#默认情况下,源文件不会压缩或解压成功删除$zstd--rmfile#解压zst压缩包$zstd-dfile.zst#解压zst压缩包到标准输出$zstd-dcfile.zst#查看zst压缩包$zstd-lfile.zst$zstdcatfile.zstadvancedusage#输出细节$zstd-vfile$zstd-v-dfile.zst#压缩一个文件,同时指定压缩级别(19最高,0最低,3默认)$zstd-levelfile$zstd-9file#使用更多的内存(压缩和解压)来达到更高的压缩率$zstd--ultra-levelfile#Decompressintoasingleprocess#多个进程并发执行压缩过程(0表示自动使用所有CPU核心)$zstd-T0file$zstd-T4file$zstd-T4-dfile.zst4。参考文档Facebook使用Zstandard大规模改进压缩的5种方式