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 sync.WaitGroup 的 Wait 超时处理

sync.WaitGroup 使用 `Add(1)`、`Done()`、`Wait()`组合来实现多协程等待,如果某一协程未能合理处理错误,导致无法退出,此时需要引入超时机制。下面是一种超时处理方法。...

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

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