GolangNote

Golang笔记

golang snappy 的使用场合

Permalink

google 自家的 snappy 压缩优点是非常高的速度和合理的压缩率。压缩率比 gzip 小,CPU 占用小。

下面是对几个简单的字符串做 snappy 压缩前后对比:

Go: snappy压缩字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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": `浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浃浇浈浊测浍济浏浑浒浓浔泿洱涏洀洁洂洃洄洅洆洇洈洊洋洌洎洏洐洑洒洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎`,
		"d": `浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浃浇浈浊测浍济浏浑浒浓浔泿洱涏洀洁洂洃洄洅洆洇洈洊洋洌洎洏洐洑洒洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浃浇浈浊测浍济浏浑浒浓浔泿洱涏洀洁洂洃洄洅洆洇洈洊洋洌洎洏洐洑洒洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎浕浉浄浀浂洉洡洣浐洘泚浌洼洽派洿浃浇浈浊测浍济浏浑浒浓浔泿洱涏洀洁洂洃洄洅洆洇洈洊洋洌洎洏洐洑洒洓洔洕洗洠洙洚洛洝洞洟洢洤津洦洧洨洩洪洫洬洭洮洲洳洴洵洶洷洸洹洺活涎`,
	}
	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))
		}
	}
}

输出:

plaintext: snappy压缩前后对比
1
2
3
4
5
6
7
8
9
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

如果字符串包含重复字符多压缩才看到效果,对jpg 图片的压缩率不大。

对一个实际使用的数据库是否使用snappy 做对比,用户和文章都是10万,文章内容较简单。

使用snappy 压缩前:

plaintext: snappy 效果
1
2
用时 4m32.916312692s
数据库占用空间 176,209,920 字节(磁盘上的 172 MB)

使用snappy 压缩后:

plaintext: snappy 压缩后
1
2
用时 4m6.750271414s
数据库占用空间 159,424,512 字节(磁盘上的 150.9 MB)

从使用时间上看,此例压缩使用的CPU 时间小于数据压缩后省下来的数据存储IO 占用的时间。因为文章数据较短、内容简单,压缩效果不明显。

本文网址: https://golangnote.com/topic/218.html 转摘请注明来源

Related articles

golang Selenium WebDriver 使用记录

Selenium WebDriver 直接通过浏览器自动化的本地接口来调用浏览器,以达到模拟浏览器行为的操作,如点击、选择、鼠标移动等。下面是记录个人使用golang 驱动的记录。...

Golang 把cookie 字符串解析为cookie 结构

在做爬虫时有时候会遇到需要带已登录的 cookie 请求,这个时候最简单的方法是在浏览器登录后,在开发者面板找到cookie 字符串,然后拷贝粘贴。这就面临一个问题需要把cookie 字符串解析成Go 语言 cookie 结构体。...

Go Modules 使用备忘

简单说 Go Modules 就是包管理,从 go1.11 开始支持,可以不需要gopath存在,环境变量`GO111MODULE`,默认为 `auto` 项目存在 `go.mod` 则使用 go module ,否则使用GOPATH 和 vendor 机制。...

Write a Comment to "golang snappy 的使用场合"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.22.3 Processed in 0ms