轻松使用zstd来解压缩
1. 工具介紹
主要介紹 zstd 工具的作用和性能測試
我們稱?Zstandard?或?Zstd?是一種快速的無損壓縮算法,是針對?zlib?級別的實時壓縮方案,以及更好的壓縮比。它由一個非常快的熵階段,由?Huff0?和?FSE?庫提供。這個項目是作為開源的?BSD?許可收費的庫,以及一個生成和解碼?.zst?格式。
- 性能測試對比
| zstd 1.4.4 -1 | 2.884 | 520 MB/s | 1600 MB/s |
| zlib 1.2.11 -1 | 2.743 | 110 MB/s | 440 MB/s |
| brotli 1.0.7 -0 | 2.701 | 430 MB/s | 470 MB/s |
| quicklz 1.5.0 -1 | 2.238 | 600 MB/s | 800 MB/s |
| lzo1x 2.09 -1 | 2.106 | 680 MB/s | 950 MB/s |
| lz4 1.8.3 | 2.101 | 800 MB/s | 4220 MB/s |
| snappy 1.1.4 | 2.073 | 580 MB/s | 2020 MB/s |
| lzf 3.6 -1 | 2.077 | 440 MB/s | 930 MB/s |
Zstd?還可以壓縮速度為代價提供更強的壓縮比,Speed vs Rtrade?可以通過小增量進行配置。在所有設置中,解壓速度保持不變,并在所有?LZ壓縮算法( 比如?zlib?或者lzma) 共享的屬性中保持不變。
?
輕松使用zstd來解壓縮
以前的壓縮方式,都是適用于典型文件和二進制的壓縮方案(?MB/GB)的情況。然而,要壓縮的數據量越小,壓縮就越困難。這是所有壓縮算法都存在的問題,原因是壓縮算法從過去的數據中學習如何壓縮未來的數據。但是在一個新的數據集的開始,沒有“過去”可以參考。
為了解決這種情況,Zstd?提供了一種新的訓練模式,可以使用這種模式對所選數據類型的算法進行調優。 訓練?Zstandard?是通過提供一些樣本(每個樣本一個文件)來實現的,訓練的結果存儲在稱為“字典”的文件中,該文件必須在壓縮和解壓縮之前加載。使用此字典,可以在小數據上實現的壓縮率大大提高。
以下示例,使用由?github?公共?API?創建的?github?用戶示例集。它由大約?10K?條記錄組成,每條記錄?1KB?左右。
- 小數據壓縮的案例
?
輕松使用zstd來解壓縮
如果在一組小的數據樣本中存在某種相關性,那么訓練就是有效的。一個字典的數據越具體,它的效率就越高(沒有通用字典)。因此,為每種類型的數據部署一個字典將帶來最大的好處。字典增益在前幾個?KB?中最有效。然后,壓縮算法將逐步使用先前解碼的內容,以更好地壓縮文件的其余部分。
- 字典壓縮使用示例
bash
# 訓練字典 $ zstd --train FullPathToTrainingSet/* -o dictionaryName# 用字典壓縮 $ zstd -D dictionaryName FILE# 用字典解壓縮 $ zstd -D dictionaryName --decompress FILE.zst?
輕松使用zstd來解壓縮
?
輕松使用zstd來解壓縮
- 提供客戶端工具
?
輕松使用zstd來解壓縮
2. 參數命令
主要介紹 zstd 工具的安裝和全部的參數命令
- 安裝方式
bash
# Ubuntu $ apt install zstd# CentOS $ yum install zstd# 編譯安裝 $ git clone https://github.com/facebook/zstd.git $ cd zstd; make; sudo make install?
輕松使用zstd來解壓縮
- 參數命令
bash
$ zstd --help 使用方式 :zstd [args] [FILE(s)] [-o file]參數選項 :-# : 壓縮級別(1-19,默認值為3)-d : 解壓-D file: 使用文件作為字典-o file: 結果存儲在文件中-f : 在沒有提示的情況下覆蓋輸出并(解壓)壓縮鏈接 --rm : 成功解壓縮后刪除源文件-k : 保存源文件(默認)-h/-H : 顯示幫助/長幫助并退出高級選項 :-V : 顯示版本號并退出-v : 詳細模式-q : 靜默輸出-c : 強制寫入標準輸出-l : 輸出zstd壓縮包中的信息 --ultra : 啟用超過19級,最多22級(需要更多內存)-T# : 使用幾個線程進行壓縮(默認值:1個)-r : 遞歸地操作目錄 --format=gzip : 將文件壓縮為.gz格式-M# : 為解壓設置內存使用限制字典生成器 : --train ## : 從一組訓練文件中創建一個字典 --train-cover[=k=#,d=#,steps=#] : 使用帶有可選參數的cover算法 --train-legacy[=s=#] : 有選擇性地使用遺留算法(默認值:9)-o file : “file”是字典名(默認:字典) --maxdict=# : 將字典限制為指定大小(默認值:112640) --dictID=# : 強制字典ID為指定值(默認:隨機)性能測試參數 :-b# : 基準測試文件,使用#壓縮級別(默認為1)-e# : 測試從-bX到#的所有壓縮級別(默認值:1)-i# : 最小計算時間(秒)(默認為3s)-B# : 將文件切成大小為#個獨立塊(默認:無塊) --priority=rt : 將進程優先級設置為實時3. 使用技巧
主要介紹一些關于 zstd 工具的使用示例和參數解釋
- 簡單使用
bash
# 將一個文件壓縮成一個后綴為.zst的新文件 # 如果命令后面沒有文件或文件為-的話,則讀取標準輸入 $ zstd file# 在壓縮操作后刪除源文件 # 默認情況下,源文件在成功壓縮或解壓縮后不會被刪除 $ zstd --rm file# 解壓zst壓縮包 $ zstd -d file.zst# 解壓zst壓縮包到標準輸出 $ zstd -dc file.zst# 查看zst壓縮包 $ zstd -l file.zst $ zstdcat file.zst- 高級用法
bash
# 輸出詳細信息 $ zstd -v file $ zstd -v -d file.zst# 壓縮一個文件同時指定壓縮級別(19最高,0最低,3為默認) $ zstd -level file $ zstd -9 file# 使用更多的內存(壓縮和解壓時)以達到更高的壓縮比 $ zstd --ultra -level file# 解壓縮為單進程 # 多個進程并發執行壓縮過程(0表示自動使用所有CPU核心) $ zstd -T0 file $ zstd -T4 file $ zstd -T4 -d file.zst4. 參考文檔
授人玫瑰,手有余香!
- 5 ways Facebook improved compression at scale with Zstandard
總結
以上是生活随笔為你收集整理的轻松使用zstd来解压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 续说零拷贝(Zero-Copy) - D
- 下一篇: nginx 源码调试