Zstandard:一種新的無損壓縮算法

Zstandard(縮寫爲Zstd)是一種新的無損壓縮算法,旨在提供快速壓縮,並實現高壓縮比。它既不像LZMAZPAQ那樣追求儘量高的壓縮比,也不像LZ4那樣追求極致的壓縮速度。

下面是一組基準測試數據: php

 

壓縮算法名稱 html

壓縮比 git

壓縮速度(MB/s) github

解壓速度(MB/s) 算法

zlib 1.2.8 -6 服務器

3.099 app

18 性能

275 測試

Zstd ui

2.872

201

498

zlib 1.2.8 -1

2.73

58

250

LZ4 HC r127

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

LZ4 r127

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開發尚處於起步階段,本文的一些測試結果也只是早期的測試結果,其實現將會隨着時間的推移繼續改進和提升,尤爲是在項目建立的第一年裏。

相關文章
相關標籤/搜索