Google protobuf使用技巧和经验
Google protobuf是非常出色的开源工具,在项目中可以用它来作为服务间数据交互的接口,例如rpc服务、数据文件传输等。protobuf为proto文件中定义的对象提供了标准的序列化和反序列化方法,可以很方便的对pb对象进行各种解析和转换。以下是我总结的protobuf使用技巧和经验,分享给大家。由于公众号尚未开通评论功能,抱歉暂时还不能评论交流。
技巧1:使用optional而不是required字段。
protobuf的可选字段optional是一个很巧妙的设计,optional字段是可选的,一个optional字段存在与否都不影响proto对象的序列化和反序列化,利用它可以实现数据协议的向后兼容和向前兼容,即以后增加新的字段,或弃用(注意这里是弃用而不是删除)旧字段都不需要修改代码。
相比optional字段,requried字段要求字段必须存在,否则会导致proto解析失败。一旦某个字段被设计为requried类型,将来随着业务的快速发展可能会成为负担,因此在使用requried类型时一定要慎重。
技巧2:使用bytes而不是string字段。
这个技巧要感谢身边好同事的建议和提醒,protobuf的bytes和string都能表示字符串,但是string类型会对字符串做utf8格式校验,而bytes不会,因此使用bytes的编解码效率更高。
技巧3:尽可能只维护一份proto文件。
世界上唯一不变的事情就是永远在发生变化,精心设计好的proto文件也会随着业务发展而改变。因此,工程中不提倡拷贝分发proto文件,而应通过提供git地址的方式只维护一份proto文件。
技巧4:尽可能减少对其他proto文件的依赖。
proto应尽量独立,在某些编程语言如lua中是不支持proto中嵌套其他proto这种方式的,需要手动修改以剔除外部proto依赖,或采用其他办法解决。另外,减少对其他proto文件的依赖也有利于对proto的查看和理解。
技巧5:利用开源工具实现proto和json的转换。
protobuf的二进制可读性不好,远不如json的可读性,工程中有很多地方都会涉及proto和json之间的转换。假如你手头上有一个很好用的json开发接口,现在要实现proto和json之间的相互转换,一定要抵制住造轮子的冲动,而应该去找找json2pb这样的开源工具。开源工具只需要几行代码就能搞定这样的需求,又好又快,既能提高工作效率,又可以保证质量。
更多技巧: 网上还有一些很好的关于protobuf的文章,例如protobuf和thrift之间的优缺点对比,protobuf的int压缩设计,protobuf的使用例子,以及lua中解决proto文件嵌套其他proto文件的解决方法等等。学无止境,唯有一生勤勉。
金句分享
开始时,我并不指望能够学到多少东西。可是,读完这本书后,我发现,我激励自己的方式无意中促成了自我憎恨。由于认为自己"应该"做到许多事情,我不停的指责自己、命令自己、要求自己。这不可避免地导致内在的分裂与不满。
——摘自《非暴力沟通》的“译序”,作者马歇尔·卢森堡博士,译者阮胤华。
转载于:https://www.cnblogs.com/zgwu/p/10403939.html
Google protobuf使用技巧和经验相关推荐
- Google搜索使用技巧
来源 http://blog.csdn.net/agyn125/archive/2008/01/27/2067930.aspx 1. Google搜索技巧(11):提高精确度的"in&quo ...
- 使用google高级搜索技巧
练习使用google高级搜索技巧: 关键字 and 关键字:在Google的检索规则中,最基本的一条是默认And规则,即当你输入多个检索词之后,Google默认为要检索所有的包含所有检索词的网页,它们 ...
- Protobuf3 google protobuf
Protobuf3 相关连接: Google-protobuf(需要翻墙):https://developers.google.com/protocol-buffers/ Protobuf on gi ...
- 一种自动反射消息类型的 Google Protobuf 网络传输方案
陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice t.sina.com.cn/giantchen 这篇文章要解决的问题是:在接收到 protobuf 数据 ...
- google ProtoBuf开发者指南
目录 1 概览 1.1 什么是protocol buffer 1.2 他们如何工作 1.3 为什么不用XML? 1.4 听起来像是为我的解决方案,如何开始? 1.5 一点历史 ...
- Google protobuf解析消息逻辑的版本问题
在分析caffe2源码的过程中,由于caffe2使用protobuf作为网络结构和网络参数序列化和反序列化的机制,想在反序列化之前进行加解密处理,这是反向protouf其实有两个版本的实现来进行消息的 ...
- 使用CSharp编写Google Protobuf插件
什么是 Google Protocol Buffer? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 ...
- css之其它技巧和经验列表
其它技巧和经验列表(*以下实例默认运行环境都为Standard mode): 如何让层在falsh上显示? 方法: ``` 设置flash的wmode值为transparent或opaque ``` ...
- pythongoogle.probuf.timestamp_数据通信格式:Google Protobuf
Protobuf是Google开发的序列化结构数据的一套工具,适合用于数据存储,以及不同语言不同应用之间进行通信的数据交换格式.目前Google提供了C++,Python,Java,Go等语言的支持. ...
最新文章
- c++ 从文本中逐行读取,并按空格对读取的一行进行分割
- 如何拿到高薪数据分析师offer?从精准解读一篇招聘信息开始!
- 智汇医工 创享未来:国家标准《健康医疗信息安全指南》验证项目启动会成功举办...
- Geoserver汉语版出来啦!!
- GDCM:gdcm::XMLPrivateDictReader的测试程序
- linux系统while循环,linux命令:while循环(示例代码)
- 接口返回[object,Object]解决方法
- MS SQL 表字段增加,删除,修改
- nodejs脚本后台运行
- java watir_watir webdriver 安装
- 21cn邮箱服务器端,21CN 免费邮箱常见问题
- 历时两年,秘鲁四人调查团队发布反腐 AI
- 22个常用Python包,相信你一定用的到!
- 繁体字转换为中文python
- xml与json互转 C语言实现,通过json-lib、jdom及xom定义XML和JSON格式处理工具类实现xml和json间相互转换...
- 编程金融小白学 股票期权 lv.6 希腊字母 Gamma
- 加密解密,MySQL单行函数,数学函数字符串日期时间,流程控制,完整详细可收藏查询SQL
- R语言实现SOM(自组织映射)模型(三个函数包+代码)
- 图像处理---亚像素
- 使用php读取文件中的内容,以表格的形式进行输出。
热门文章
- 一个JavaBean和DTO转换的优秀案例
- SAP RFC 函数来创建 Java呼叫 学习总结 一步一步的插图
- centos 安装 erlang
- 壊小子的学习【程序开发学习篇】(一)培训时期的学习
- microsoft visual sourcesafe explorer 获取不了文件夹的解决方法
- 经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已~~主要是:ceil,floor,round,intval...
- Gitblit用户没有push权限,但是已经在team里面配置了
- Linux soft lockup分析
- vs2008中xlslib与libxls库的编译及使用
- 小程序添加动画效果--遇到的问题