溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

golang中snappy的使用場(chǎng)合實(shí)例詳解

發(fā)布時(shí)間:2020-10-15 12:03:20 來(lái)源:腳本之家 閱讀:199 作者:daisy 欄目:編程語(yǔ)言

前言

項(xiàng)目中遇到的壓縮/解壓縮需求應(yīng)該是很多的,比如典型的考慮網(wǎng)絡(luò)傳輸延時(shí)而對(duì)數(shù)據(jù)進(jìn)行壓縮傳輸,又或者其他各種省空間存儲(chǔ)需求等。這次同樣是遇到了類似需求,在做一個(gè)爬蟲(chóng)時(shí),因?yàn)樽ト№?xiàng)目還未確定,所以考慮將整個(gè)html頁(yè)面壓縮存儲(chǔ)于數(shù)據(jù)庫(kù),于是又是各種google,最后不出意外的google到了google家的Snappy :-)

google 自家的snappy 壓縮優(yōu)點(diǎn)是非常高的速度和合理的壓縮率。壓縮率比gzip 小,CPU 占用小。

golang中snappy使用場(chǎng)合

下面是對(duì)幾個(gè)簡(jiǎn)單的字符串做snappy 壓縮前后對(duì)比:

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": `浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浹澆湞濁測(cè)澮濟(jì)瀏渾滸濃潯泿洱涏洀潔洂洃洄洅洆洇洈洊洋洌洎洏洐洑灑洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎`,
 "d": `浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浹澆湞濁測(cè)澮濟(jì)瀏渾滸濃潯泿洱涏洀潔洂洃洄洅洆洇洈洊洋洌洎洏洐洑灑洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浹澆湞濁測(cè)澮濟(jì)瀏渾滸濃潯泿洱涏洀潔洂洃洄洅洆洇洈洊洋洌洎洏洐洑灑洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浹澆湞濁測(cè)澮濟(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ù)字符多壓縮才看到效果,對(duì)jpg 圖片的壓縮率不大。

對(duì)一個(gè)實(shí)際使用的數(shù)據(jù)庫(kù)是否使用snappy 做對(duì)比,用戶和文章都是10萬(wàn),文章內(nèi)容較簡(jiǎn)單。

使用snappy 壓縮前:

用時(shí) 4m32.916312692s
數(shù)據(jù)庫(kù)占用空間 176,209,920 字節(jié)(磁盤(pán)上的 172 MB)

使用snappy 壓縮后:

用時(shí) 4m6.750271414s
數(shù)據(jù)庫(kù)占用空間 159,424,512 字節(jié)(磁盤(pán)上的 150.9 MB)

從使用時(shí)間上看,此例壓縮使用的CPU 時(shí)間小于數(shù)據(jù)壓縮后省下來(lái)的數(shù)據(jù)存儲(chǔ)IO 占用的時(shí)間。因?yàn)槲恼聰?shù)據(jù)較短、內(nèi)容簡(jiǎn)單,壓縮效果不明顯。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI