最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年12月18日 08:39:42   投稿:daisy  
在java 和go語(yǔ)言 大字符傳達(dá)的時(shí)候, 采用snappy 壓縮 解壓縮是最好的方案。下面這篇文章主要給大家介紹了關(guān)于golang中snappy使用場(chǎng)合的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。

前言

項(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ì)腳本之家的支持。

相關(guān)文章

  • 玩轉(zhuǎn)Go命令行工具Cobra

    玩轉(zhuǎn)Go命令行工具Cobra

    這篇文章主要介紹了玩轉(zhuǎn)Go命令行工具Cobra,本文介紹了Cobra的最基本也是最常用的使用部分,但是Cobra仍然有很多優(yōu)秀的操作值得我們學(xué)習(xí),需要的朋友可以參考下
    2022-08-08
  • Golang上下文Context的常見(jiàn)應(yīng)用場(chǎng)景

    Golang上下文Context的常見(jiàn)應(yīng)用場(chǎng)景

    Golang?context主要用于定義超時(shí)取消,取消后續(xù)操作,在不同操作中傳遞值。本文通過(guò)簡(jiǎn)單易懂的示例進(jìn)行說(shuō)明,感興趣的可以了解一下
    2023-04-04
  • 源碼解析gtoken替換jwt實(shí)現(xiàn)sso登錄

    源碼解析gtoken替換jwt實(shí)現(xiàn)sso登錄

    這篇文章主要為大家介紹了源碼解析gtoken替換jwt實(shí)現(xiàn)sso登錄的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • golang使用通道時(shí)需要注意的一些問(wèn)題

    golang使用通道時(shí)需要注意的一些問(wèn)題

    本文主要介紹了golang使用通道時(shí)需要注意的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Go實(shí)現(xiàn)并發(fā)的示例代碼

    Go實(shí)現(xiàn)并發(fā)的示例代碼

    Go語(yǔ)言的并發(fā)機(jī)制是其強(qiáng)大和流行的一個(gè)關(guān)鍵特性之一,本文主要介紹了Go實(shí)現(xiàn)并發(fā)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Golang解析JSON遇到的坑及解決方法

    Golang解析JSON遇到的坑及解決方法

    這篇文章主要為大家介紹了Golang解析JSON時(shí)會(huì)遇到的一些坑及解決方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一點(diǎn)的幫助,需要的可以參考一下
    2023-02-02
  • Go使用chan或context退出協(xié)程示例詳解

    Go使用chan或context退出協(xié)程示例詳解

    這篇文章主要為大家介紹了Go使用chan或context退出協(xié)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • GoLang中的timer定時(shí)器實(shí)現(xiàn)原理分析

    GoLang中的timer定時(shí)器實(shí)現(xiàn)原理分析

    Timer中對(duì)外暴露的只有一個(gè)channel,這個(gè) channel也是定時(shí)器的核心。當(dāng)計(jì)時(shí)結(jié)束時(shí),Timer會(huì)發(fā)送值到channel中,外部環(huán)境在這個(gè) channel 收到值的時(shí)候,就代表計(jì)時(shí)器超時(shí)了,可與select搭配執(zhí)行一些超時(shí)邏輯
    2023-02-02
  • Golang交叉編譯之跨平臺(tái)編譯使用詳解

    Golang交叉編譯之跨平臺(tái)編譯使用詳解

    這篇文章主要為大家介紹了Golang交叉編譯之跨平臺(tái)編譯使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 詳解go語(yǔ)言 make(chan int, 1) 和 make (chan int) 的區(qū)別

    詳解go語(yǔ)言 make(chan int, 1) 和 make (chan int) 的區(qū)別

    這篇文章主要介紹了go語(yǔ)言 make(chan int, 1) 和 make (chan int) 的區(qū)別,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

芦溪县| 板桥市| 体育| 玛沁县| 特克斯县| 怀宁县| 扶风县| 西吉县| 休宁县| 息烽县| 紫金县| 平舆县| 安远县| 曲靖市| 湘潭县| 杨浦区| 闸北区| 西充县| 襄垣县| 剑川县| 栾川县| 米林县| 铅山县| 门源| 百色市| 文成县| 江孜县| 徐闻县| 密山市| 济南市| 英山县| 三都| 武鸣县| 仪征市| 工布江达县| 三门县| 衢州市| 上杭县| 合江县| 天全县| 通道|