Zstandard:一種新的無損壓縮算法
Zstandard(縮寫為Zstd)是一種新的無損壓縮算法,旨在提供快速壓縮,并實現高壓縮比。它既不像LZMA和ZPAQ那樣追求盡可能高的壓縮比,也不像LZ4那樣追求極致的壓縮速度。
下面是一組基準測試數據:
壓縮算法名稱 |
壓縮比 |
壓縮速度(MB/s) |
解壓速度(MB/s) |
3.099 |
18 |
275 |
|
Zstd |
2.872 |
201 |
498 |
2.73 |
58 |
250 |
|
2.72 |
26 |
1720 |
|
QuickLZ 1.5.1b6 |
2.237 |
323 |
373 |
LZO 2.06 |
2.106 |
351 |
510 |
Snappy 1.1.0 |
2.091 |
238 |
964 |
2.084 |
370 |
1590 |
|
LZF 3.6 |
2.077 |
220 |
502 |
(環境:Core i5-4300U @ 1.9GHZ;基準測試程序:開源程序fsbench 0.14.3)
從上表可以看出,Zstd的壓縮比和壓縮速度都比較高,而且解壓速度大約為每核500MB/s。
Zstd的壓縮速度可以根據不同的情況進行配置。在上述測試中,它提供了大約每核200MB/s的速度,可以用于一些實時壓縮場景。同時,與LZ4類似,它可以提供平衡壓縮比和壓縮時間的衍生算法,并且不影響解壓性能。
Zstd還有一個特點是內存需求可配置。這使它可以適應內存配置低或者服務器并行處理多個請求的情況。此外,它采用了“有限狀態熵(Finite State Entropy,縮寫為FSE)”編碼器。該編碼器是由Jarek Duda基于ANS理論開發的一種新型熵編碼器,旨在與“霍夫曼編碼器(Huffman encoder)”和“算數編碼器(Arithmetic encoder)”相競爭。
另據Cyan4973項目創建者Yann Collet介紹,雖然Zstd是一個速度很快的壓縮/解壓算法,但它并沒有進入LZ4的適用范圍。在一項基準測試中(測試方法見這里),Collet得出了這樣的結論:
當傳輸速度高于50MB/s時,LZ4是更好的選擇;而當傳輸速度介于0.5MB/s和50MB/s時,Zstd在速度上領先于其它算法。
此外,在回復用戶評論時,Collect比較了Zstd與lzham:
根據我的理解,它們的設計出發點不同。Lzham來源于LZMA……以離線壓縮場景作為衡量標準……而Zstd的基本原則更像Zlib,但主要有三點變化:
- FSE代替霍夫曼編碼器;
- 不限匹配尺寸;
- 偏移量可重復。
最后,請讀者朋友們注意:Zstd開發尚處于起步階段,本文的一些測試結果也只是早期的測試結果,其實現將會隨著時間的推移繼續改進和提高,尤其是在項目創建的第一年里。
來自:http://www.infoq.com/cn/news/2015/01/zstandard-compression-algorithm