2011-04-20 209 views
4

我有一個應用程序使用外部緩存的一些數據(特別是,在另一臺服務器上的memcached)。有一個選項可以在緩存之前用zlib壓縮數據。問題是 - 哪個數據大小值得壓縮?例如,如果我們有10字節的數據項,那麼浪費時間壓縮/解壓它可能是沒有用的。但是如果我們有10K的數據,這可能是值得的。存儲的數據將主要是ASCII字符串。我知道這取決於網絡速度,CPU速度,數據和什麼不是,但有沒有任何指導方針或啓發式?不一定是完美的,但如果它可以節省一些週期,那就太好了。zlib壓縮的最小數據大小?

+0

我在想壓縮小於網絡數據包的數據可能不值得,因爲發送它大概需要同一時間......我不知道它是否正確? – StasM 2011-04-20 23:15:23

回答

2

Zlib的deflate具有極小的塊頭(4位)。 http://www.gzip.org/zlib/rfc-deflate.html 3.2.3節

它可以存儲未壓縮的塊或用固定的哈夫曼表進行壓縮,因此即使數據很短,您的數據也不會大量擴展。

UPDATE:

有用於壓縮短字符串(天真的)項目smazhttps://github.com/antirez/smaz和作者說,

認爲像zlib的通常無法壓縮文本比100短字節。

速度。可能你應該寫一個小的基準程序。我可以找到這項研究http://pytables.github.com/usersguide/optimization.html,有一些有趣的數字:寫不同壓縮的短記錄的速度(no,zlib,lzo,bzip2);並閱讀短記錄。

Zlib在寫入時比未壓縮時慢5倍,讀取時低8倍。此外,lzo在這次評估中表現更好。

+1

我並不擔心擴展問題,因爲在壓縮和解壓縮的東西上浪費時間而不能從壓縮中獲得任何加速。 – StasM 2011-04-20 22:41:55