速度快,性能好!壓縮神器 zstd

圖片

工具介紹

主要介紹 zstd 工具的做用和性能測試html

咱們稱 Zstandard 或 Zstd 是一種快速的無損壓縮算法,是針對 zlib 級別的實時壓縮方案,以及更好的壓縮比。它由一個很是快的熵階段,由 Huff0 和 FSE 庫提供。這個項目是做爲開源的 BSD 許可收費的庫,以及一個生成和解碼 .zst 格式。git

  • 性能測試對比

圖片

Zstd 還能夠壓縮速度爲代價提供更強的壓縮比,Speed vs Rtrade 能夠經過小增量進行配置。在全部設置中,解壓速度保持不變,並在全部 LZ壓縮算法( 好比 zlib 或者lzma) 共享的屬性中保持不變。github

圖片

之前的壓縮方式,都是適用於典型文件和二進制的壓縮方案( MB/GB)的狀況。然而,要壓縮的數據量越小,壓縮就越困難。這是全部壓縮算法都存在的問題,緣由是壓縮算法從過去的數據中學習如何壓縮將來的數據。可是在一個新的數據集的開始,沒有「過去」能夠參考。算法

爲了解決這種狀況,Zstd 提供了一種新的訓練模式,可使用這種模式對所選數據類型的算法進行調優。訓練 Zstandard 是經過提供一些樣本(每一個樣本一個文件)來實現的,訓練的結果存儲在稱爲「字典」的文件中,該文件必須在壓縮和解壓縮以前加載。使用此字典,能夠在小數據上實現的壓縮率大大提升。併發

如下示例,使用由 github 公共 API 建立的 github 用戶示例集。它由大約 10K 條記錄組成,每條記錄 1KB 左右。app

  • 小數據壓縮的案例

圖片

若是在一組小的數據樣本中存在某種相關性,那麼訓練就是有效的。一個字典的數據越具體,它的效率就越高(沒有通用字典)。所以,爲每種類型的數據部署一個字典將帶來最大的好處。字典增益在前幾個 KB 中最有效。而後,壓縮算法將逐步使用先前解碼的內容,以更好地壓縮文件的其他部分。工具

  • 字典壓縮使用示例
# 訓練字典
$ zstd --train FullPathToTrainingSet/* -o dictionaryName
# 用字典壓縮
$ zstd -D dictionaryName FILE
# 用字典解壓縮
$ zstd -D dictionaryName --decompress FILE.zst

圖片

  • 提供客戶端工具

圖片

參數命令

主要介紹 zstd 工具的安裝和所有的參數命令post

安裝方式
# Ubuntu
$ apt install zstd
# CentOS
$ yum install zstd
# 編譯安裝
$ git clone https://github.com/facebook/zstd.git
$ cd zstd; make; sudo make install

圖片

參數性能

$ 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 : 將進程優先級設置爲實時

使用技巧

主要介紹一些關於 zstd 工具的使用示例和參數解釋

簡單使用
# 將一個文件壓縮成一個後綴爲.zst的新文件
# 若是命令後面沒有文件或文件爲-的話,則讀取標準輸入
$ zstd file
# 在壓縮操做後刪除源文件
# 默認狀況下,源文件在成功壓縮或解壓縮後不會被刪除
$ zstd --rm file
# 解壓zst壓縮包
$ zstd -d file.zst
# 解壓zst壓縮包到標準輸出
$ zstd -dc file.zst
# 查看zst壓縮包
$ zstd -l file.zst
$ zstdcat file.zst
高級用法
# 輸出詳細信息
$ 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.zst
做者: Escape  連接: https://www.escapelife.site/p...
版權聲明: 本博客全部文章除特別聲明外,均採用 CC BY 4.0 許可協議。

image

相關文章
相關標籤/搜索