参考美团技术博客 压缩算法在构建部署中的优化

源码:

package utilsimport ("bytes""compress/gzip""errors""github.com/pierrec/lz4/v4""io/ioutil"
)func LZ4(data []byte) ([]byte, error) {buf := make([]byte, lz4.CompressBlockBound(len(data)))var c lz4.Compressorn, err := c.CompressBlock(data, buf)if err != nil {return nil, err}if n >= len(data) {return nil, errors.New("not compressible")}return buf[:n], nil
}func UnLZ4(data []byte) ([]byte, error) {// Allocate a very large buffer for decompression.out := make([]byte, 10*len(data))n, err := lz4.UncompressBlock(data, out)if err != nil {return nil, err}return out[:n], nil
}func Gzip(data []byte) ([]byte, error) {var buf bytes.Bufferw := gzip.NewWriter(&buf)_, err := w.Write(data)if err != nil {return nil, err}if err := w.Close(); err != nil {return nil, err}return buf.Bytes(), nil
}func UnGzip(data []byte) ([]byte, error) {buf := bytes.NewBuffer(data)r, err := gzip.NewReader(buf)if err != nil {return nil, err}result, err := ioutil.ReadAll(r)if err != nil {return nil, err}if err := r.Close(); err != nil {return nil, err}return result, nil
}

压测源码

package utilsimport ("io/ioutil""os""testing"
)func prepareData() []byte {// Compress and uncompress an input string.f, err := os.Open("{your_file_path}")if err != nil {panic(err)}data, err := ioutil.ReadAll(f)if err != nil {panic(err)}return data
}func BenchmarkLZ4(b *testing.B) {b.RunParallel(func(pb *testing.PB) {data := prepareData()for pb.Next() {_, err := LZ4(data)if err != nil {panic(err)}}})}func BenchmarkUnLZ4(b *testing.B) {data := prepareData()encoded, err := LZ4(data)if err != nil {panic(err)}b.RunParallel(func(pb *testing.PB) {for pb.Next() {_, err := UnLZ4(encoded)if err != nil {panic(err)}}})}func BenchmarkGzip(b *testing.B) {data := prepareData()b.RunParallel(func(pb *testing.PB) {for pb.Next() {_, err := Gzip(data)if err != nil {panic(err)}}})}func BenchmarkUnGzip(b *testing.B) {data := prepareData()encoded, err := Gzip(data)if err != nil {panic(err)}b.RunParallel(func(pb *testing.PB) {for pb.Next() {_, err := UnGzip(encoded)if err != nil {panic(err)}}})
}

测试一下压缩速度(压缩比可以参考上面贴的文章,gzip/lz4 压缩比差距不大,这里主要对比速度):

gzip

  • 优点: 相对通用
  • 缺点:较慢

lz4

  • 优点:压缩/解压 速度非常快,大约是 gzip 10 倍
  • 缺点:相对 gzip, 通用性稍低

golang 压缩算法 gzip/lz4 对比相关推荐

  1. gzip压缩算法: gzip 所使用压缩算法的基本原理

    gzip压缩算法: gzip 所使用压缩算法的基本原理_凡间_百度空间 gzip压缩算法: gzip 所使用压缩算法的基本原理 1 gzip 所使用压缩算法的基本原理 gzip 对于要压缩的文件,首先 ...

  2. Scala与Golang的并发实现对比----好问

    Scala与Golang的并发实现对比 并发语言俨然是应大规模应用架构的需要而提出,有其现实所需.前后了解了Scala和Golang,深深体会到现代并发语言与旧有的Java.C++等语言在风格及理念上 ...

  3. Golang 本地缓存选型对比及原理总结

    提到本地缓存大家都不陌生,只要是个有点经验的后台开发人员,都知道缓存的作用和弊端.本篇文章我们就来简单聊聊在 golang 做业务开发的过程中,本地缓存的一些可选的开源方案.分析它们的特点,以及内部的 ...

  4. golang微服务框架对比_微服务里程碑,Golang与Spring Cloud Alibaba完美结合

    目前微服务架构仍是软件架构中最新的热门话题,虽然Golang是一门新的语言,但Golang的性能比python和java高出不少.既能承受程序使用运行的服务构建的繁重负载,又容易与GitHub集成,管 ...

  5. golang微服务框架对比_Go语言开发的微服务框架,你了解多少?

    Go语言开发的微服务框架 1.项目名称:Istio 项目简介:Istio是由Google.IBM和Lyft开源的微服务管理.保护和监控框架.使用istio可以很简单的创建具有负载均衡.服务间认证.监控 ...

  6. golang微服务框架对比_最强开源微服务框架,全网独家整理

    诞生于 2014 年的"微服务架构",其思想经由 Martin Fowler 阐述后,在近几年持续受到重视,理论与相关实践都不断发展,目前它已经成为了主流软件架构模式. 关于微服务 ...

  7. golang srpint和itoa对比

    数字转换成字符串,使用 strconv.Itoa() 比 fmt.Sprintf() 要快 func BenchmarkItoa(b *testing.B) {number := 1234567890 ...

  8. Golang最佳Web框架对比

    Beego 面向Go编程语言的开源高性能web框架 https://github.com/astaxie/beego https://beego.me Buffalo 使用Go语言快速构建Web应用 ...

  9. golang常用库之- pierrec/lz4包 | lz4命令、lz4压缩算法(高压解速度)

    文章目录 golang常用库之-golang常用库之- pierrec/lz4包 | lz4压缩算法(高压解速度) LZ4压缩算法 lz4使用场景 lz4命令工具安装和使用 pierrec/lz4包 ...

最新文章

  1. Unity的三种Interceptor
  2. R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析:拟合连续性自变量和事件风险之间的关系并绘制直方图、平滑曲线、双Y轴于同一个图像中
  3. ?? 运算符 和三元运算符
  4. netcore命令行部署|跨域问题
  5. sdn智能互联系统及开发平台_聊天交友平台系统APP开发
  6. SAP GUI security setting on local file access
  7. python跳转到新页面、如何等待页面加载完_python urllib2 – 在抓取之前等待页面完成加载/重定向?...
  8. 毕设题目:Matlab元胞自动机病毒仿真
  9. IE7、IE8、IE9、IE10后各版本的更新及差别
  10. win7下载原型软件Axure
  11. 证明连续随机变量形式Jensen不等式
  12. Mac上超级抠图工具推荐,一键轻松解决
  13. emouse思·睿—评论与观点整理之二
  14. Ubuntu 使用 ffmpeg 将 webm 转换为 mp4 (批量)
  15. 致敬2020——打工人的成长故事
  16. 听见丨前谷歌无人车负责人联手大众和现代 开发自动驾驶 自动驾驶技术研发公司AImotive获3800万美元C轮融资
  17. 最近无聊做了一个新站玩玩(www.01zhc.cn)
  18. 【最简单】STM32+ESP8266+MQTT+EMQX完成数据上传和点灯环节
  19. python提取文件中特定字符串
  20. 个人理解小波变换及转载小波变换原理

热门文章

  1. 关于Android模拟器运行时,鼠标放到虚拟键盘上报错的解决办法
  2. 教你用堆排序解决topk问题
  3. 良心杀毒,贴心免费去弹窗(你的Windows杀毒软件有这个功能吗?)
  4. MTSC 2018第四届中国移动互联网测试开发大会7月13号举办
  5. 洛谷P1706 全排列问题
  6. Vue3.0 —— watch函数
  7. GNU 工具链调试信息分离和挂载:支持 GDB 调试 RELEASE 版本程序
  8. Android手机APN设置(中国移动 联通3G 电信天翼),解决不能上网的问题
  9. Incaseformat蠕虫病毒分析
  10. 计算机毕业设计springboot+vue基本微信小程序的演出门票管理系统-票务转票系统