主頁 > 知識庫 > golang中snappy的使用場合實(shí)例詳解

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

熱門標(biāo)簽:釘釘有地圖標(biāo)注功能嗎 阿里云ai電話機(jī)器人 鄭州亮點(diǎn)科技用的什么外呼系統(tǒng) 汕頭小型外呼系統(tǒng) 建造者2地圖標(biāo)注 濱州自動電銷機(jī)器人排名 黃岡人工智能電銷機(jī)器人哪個好 惠州電銷防封電話卡 浙江高頻外呼系統(tǒng)多少錢一個月

前言

項(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壓縮遇到的問題

標(biāo)簽:泰安 昭通 阿壩 東營 瀘州 駐馬店 滄州 晉中

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang中snappy的使用場合實(shí)例詳解》,本文關(guān)鍵詞  golang,中,snappy,的,使用,場合,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang中snappy的使用場合實(shí)例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang中snappy的使用場合實(shí)例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章