前言
項(xiàng)目中遇到的壓縮/解壓縮需求應(yīng)該是很多的,比如典型的考慮網(wǎng)絡(luò)傳輸延時而對數(shù)據(jù)進(jìn)行壓縮傳輸,又或者其他各種省空間存儲需求等。這次同樣是遇到了類似需求,在做一個爬蟲時,因?yàn)樽ト№?xiàng)目還未確定,所以考慮將整個html頁面壓縮存儲于數(shù)據(jù)庫,于是又是各種google,最后不出意外的google到了google家的Snappy :-)
google 自家的snappy 壓縮優(yōu)點(diǎn)是非常高的速度和合理的壓縮率。壓縮率比gzip 小,CPU 占用小。
golang中snappy使用場合
下面是對幾個簡單的字符串做snappy 壓縮前后對比:
package main
import (
"fmt"
"github.com/golang/snappy"
"io/ioutil"
)
var (
textMap = map[string]string{
"a": `1234567890-=qwertyuiop[]\';lkjhgfdsazxcvbnm,./`,
"b": `1234567890-=qwertyuiop[]';lkjhgfdsazxcvbnm,./1234567890-=qwertyuiop[]\';lkjhgfdsazxcvbnm,./1234567890-=qwertyuiop[]';lkjhgfdsazxcvbnm,./1234567890-=qwertyuiop[]\';lkjhgfdsazxcvbnm,./`,
"c": `浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浹澆湞濁測澮濟(jì)瀏渾滸濃潯泿洱涏洀潔洂洃洄洅洆洇洈洊洋洌洎洏洐洑灑洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎`,
"d": `浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浹澆湞濁測澮濟(jì)瀏渾滸濃潯泿洱涏洀潔洂洃洄洅洆洇洈洊洋洌洎洏洐洑灑洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浹澆湞濁測澮濟(jì)瀏渾滸濃潯泿洱涏洀潔洂洃洄洅洆洇洈洊洋洌洎洏洐洑灑洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浹澆湞濁測澮濟(jì)瀏渾滸濃潯泿洱涏洀潔洂洃洄洅洆洇洈洊洋洌洎洏洐洑灑洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎`,
}
imgSrc = []string{
"1.jpg", "2.jpg", "3.jpg", "4.jpg",
}
)
func main() {
for k, v := range textMap {
got := snappy.Encode(nil, []byte(v))
fmt.Println("k:", k, "len:", len(v), len(got))
}
fmt.Println("snappy jpg")
for _, v := range imgSrc {
buf, err := ioutil.ReadFile(v)
if err == nil {
got := snappy.Encode(nil, buf)
fmt.Println("k:", v, "len:", len(buf), len(got))
}
}
}
輸出:
k: a len: 46 48
k: b len: 184 58
k: c len: 246 250
k: d len: 738 274
snappy jpg
k: 1.jpg len: 302829 282525
k: 2.jpg len: 89109 89051
k: 3.jpg len: 124463 123194
k: 4.jpg len: 420886 368608
如果字符串包含重復(fù)字符多壓縮才看到效果,對jpg 圖片的壓縮率不大。
對一個實(shí)際使用的數(shù)據(jù)庫是否使用snappy 做對比,用戶和文章都是10萬,文章內(nèi)容較簡單。
使用snappy 壓縮前:
用時 4m32.916312692s
數(shù)據(jù)庫占用空間 176,209,920 字節(jié)(磁盤上的 172 MB)
使用snappy 壓縮后:
用時 4m6.750271414s
數(shù)據(jù)庫占用空間 159,424,512 字節(jié)(磁盤上的 150.9 MB)
從使用時間上看,此例壓縮使用的CPU 時間小于數(shù)據(jù)壓縮后省下來的數(shù)據(jù)存儲IO 占用的時間。因?yàn)槲恼聰?shù)據(jù)較短、內(nèi)容簡單,壓縮效果不明顯。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- Go語言壓縮和解壓縮tar.gz文件的方法
- go語言制作的zip壓縮程序
- GO語言實(shí)現(xiàn)批量壓縮圖片和水印
- go語言通過zlib壓縮數(shù)據(jù)的方法
- Golang使用zlib壓縮和解壓縮字符串
- Go 語言中g(shù)in使用gzip壓縮遇到的問題