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 [email protected] GHz,使用 lzbench,一個由@inikep 在西里西亞壓縮語料庫上用 gcc 9.3.0編譯的開源記憶體基準測試。
其中--fast代表負壓縮級別,提供更快的壓縮和解壓縮度,以換取相對於1級的壓縮比損失。
小型資料壓縮的案例前面的圖表提供的結果適用於典型的檔案和流場景(幾MB的大小)。
要壓縮的資料量越小,壓縮就越困難。這個問題在所有的壓縮演算法中都很常見,原因是壓縮演算法從過去的資料中學習如何壓縮未來的資料。
為了解決這個問題,Zstd 提供了一種訓練模式,可以用來對選定型別的資料進行演算法調優。透過提供一些樣本(每個樣本一個檔案)來實現 Zstandard 的訓練。這種訓練的結果儲存在一個名為“ dictionary”的檔案中,必須在壓縮和解壓縮之前載入該檔案。使用這本字典,可以在小資料上實現的壓縮比/值大大提高。
下面的示例使用 github-users 示例集,該示例集是從 github public API 建立的。它由大約10K 條記錄組成,每條記錄重約1KB。
這些壓縮增益的實現,同時提供更快的壓縮和解壓縮速度。
如果在一組小資料樣本中存在某種相關性,則訓練是有效的。一個字典的資料特定性越強,它的效率就越高(沒有通用的字典)。因此,為每種型別的資料部署一個字典將帶來最大的好處。字典增益在前幾個 KB 中最有效。然後,壓縮演算法將逐漸使用先前解碼的內容,以更好地壓縮檔案的其餘部分。
那麼你的應用中有需要用到壓縮場景的嗎?不妨試試Facebook的這個開源庫,看看能否給你的壓縮過程提提速!