前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >protobuffer总结

protobuffer总结

原创
作者头像
用户8540127
修改2022-07-13 15:32:38
6550
修改2022-07-13 15:32:38
举报

protobuffer是一种语言无关、平台无关的数据协议,优点在于压缩性好,可扩展,标准化,常用于数据传输、持久化存储等。

架构
架构

实现原理

protobuffer协议

1 压缩性好(相比于同样跨平台、跨语言的json)

  • 去除字段定义,分隔符(引号,冒号,逗号)
  • 压缩数字,因为日常经常使用到的比较小的数字,实际有效的字节数没有4个字节
  • 采用TLV的数据存储方式:减少了分隔符的使用 & 数据存储得紧凑

varint和zigzag算法:对数字进行压缩

protobuffer协议去除字段定义,分隔符

这里有几篇文章对protobuffer总结的很好

https://learnku.com/articles/32974

https://cloud.tencent.com/developer/article/1520442

https://www.pudn.com/news/628f82d2bf399b7f351e4c8d.html

2 可拓展

protobuffer并不是一个自解析的协议(json自解析key),需要pb的meta数据解析,牺牲了可读性,但在大规模的数据处理是可以接受的。可拓展性在于protobuffer中追加定义,新旧版本是可以兼容的,但是定义是严格有序的。

3 标准化

protobuffer生态提供了完整的工具链,protobuffer提供官方的生成golang/java等实现插件,这样protobuffer字节码的各语言版本的序列化、反序列化是标准化的,也包括插件生成代码封装。以及标准化的常用工具,比如doc-gen、grpc-gen、grpc-gateway-gen等工具。

典型应用

gRPC

protobuffer封装

需要注意

1 pb结构封装的字段标序是不能更改的,否则解析错乱;

2 pb结构尽量把必选类型,比如int、bool放在filedNum<=16;可得到更好的varint压缩效果;

3 grpc-client使用时,req是指针类型,务必不要重复复制,尽量new request,否则编码时会错乱;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档