protobuf和thrift对比
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt383
数据类型
| protobuf | thrift | protobuf | thrift | protobuf | thrift | protobuf | thrift |
|---|---|---|---|---|---|---|---|
| double | double | float | byte | i16 | |||
| int32 | i32 | int64 | i64 | uint32 | uint64 | ||
| sint32 | sint64 | fixed32 | fixed64 | ||||
| sfixed32 | sfixed64 | bool | bool | string | string | ||
| bytes | binary | message | struct | enum | enum | service | service |
综合对比
| protobuf | thrift | |
| 功能特性 | 主要是一种序列化机制 | 提供了全套RPC解决方案,包括序列化机制、传输层、并发处理框架等 |
| 支持语言 | C++/Java/Python | C++, Java, Python, Ruby, Perl, PHP, C#, Erlang, Haskell |
| 易用性 | 语法类似,使用方式等类似 | |
| 生成代码的质量 | 可读性都还过得去,执行效率另测 | |
| 升级时版本兼容性 | 均支持向后兼容和向前兼容 | |
| 学习成本 | 功能单一,容易学习 | 功能丰富、学习成本高 |
| 文档&社区 | 官方文档较为丰富,google搜索protocol buffer有2000W+结果,google group被墙不能访问 | 官方文档较少,没有API文档,google搜索apache thrift仅40W结果,邮件列表不怎么活跃 |
性能对比
由于thrift功能较protobuf丰富,因此单从序列化机制上进行性能比较,按照序列化后字节数、序列化时间、反序列化时间三个指标进行,对thrift的二进制、压缩、protobuf三种格式进行对比。
测试方法:取了15000+条样本数据,分别写了三个指标的测试程序,在我自己的电脑上执行,其中时间测试循环1000次,总的序列化/反序列化次数1500W+。
平均字节数:
| thrift二进制 | 535 |
| thrift压缩 | 473 |
| protobuf | 477 |
序列化(1500W次)时间(ms):
| thrift二进制 | 306034 |
| thrift压缩 | 304256 |
| protobuf | 177652 |
反序列化(1500W次)时间(ms):
| thrift二进制 | 287972 |
| thrift压缩 | 315991 |
| protobuf | 157192 |
thrift的时间测试可能不是很准,由于thrift产生代码的复杂性,编写的测试代码为了适应其接口,在调用堆栈上可能有一些额外开销。
protobuf和thrift对比的更多相关文章
- REST SOAP Thrift 对比
别人的REST SOAP Thrift对比: 单项分数越高越好 项目 REST SOAP Thrift Extensibility 5 3 1 Neutrality 2 4 3 Independenc ...
- 三种通用应用层协议protobuf、thrift、avro对比,完爆xml,json,http
原文: https://www.douban.com/note/523340109/ Google protobuf: 优点 二进制消息,性能好/效率高(空间和时间效率都很不错) proto ...
- java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比
我们为什么要序列化 举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放.那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列 ...
- 序列化之protobuf与avro对比(Java)
最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了pro ...
- Netty学习(七)-Netty编解码技术以及ProtoBuf和Thrift的介绍
在前几节我们学习过处理粘包和拆包的问题,用到了Netty提供的几个解码器对不同情况的问题进行处理.功能很是强大.我们有没有去想这么强大的功能是如何实现的呢?背后又用到了什么技术?这一节我们就来处理这个 ...
- 解编码框架的比较(protobuf,thrift,Marshalling,xml)
1.ProtoBuf 特点: 1.结构化数据存储格式 2.高效的解编码性能. 3.语言无关,平台无关,扩展性好. 4.官方支持java,c++,python三种语言. 5.性能比较好 (与之对比xml ...
- protobuf高效传输对比json gizp等等
https://blog.csdn.net/u013929284/article/details/72582215 利用Protocol Buffers可以很好的解决JSON数据在传输方面的不足,它是 ...
- grpc 之 word2pdf使用
做一个word转pdf的服务,采用grpc,使用libreoffice命令. 1.构建libreoffice镜像 FROM python:3.6 ENV TZ=Asia/Shanghai RUN ...
- [Todo]对于thrift和protobuf比较好的描述
比较跨语言通讯框架:thrift和Protobuf 全部thrift protobuf 前两天想在微博上发表一个观点:在现在的技术体系中,能用于描述通讯协议的方式很多,xml,json,protobu ...
随机推荐
- React Native编译器的配置以及基础知识
入职新公司,这边打算采用RN来写界面,所以学习一波这一块的知识. 采用的是WebStorm来编译,据同事说,比他采用atom编译要多很多语法提示. 下载地址:https://www.jetbrains ...
- jQuery源码分析-03扩展工具函数jQuery.extend
// 扩展工具函数 jQuery.extend({ // http://www.w3school.com.cn/jquery/core_noconflict.asp // 释放$的 jQuery 控制 ...
- httpd页面用户访问认证控制
[root@liubin-pc ~]# yum install -y httpd 客户机地址限制 通过配置Order.Deny from.Allow from 来限制客户机 allow.deny :先 ...
- 小兴趣:用python生成excel格式座位表
脚本分两个文件: 1.生成二维随机列表:GenerateLocaltion.py 2.将列表导入excel文件:CreateExcel.py 先上GenerateLocaltion.py: impor ...
- Rabin-Karp【转载】
问题描述: Rabin-Karp的预处理时间是O(m),匹配时间O( ( n - m + 1 ) m )既然与朴素算法的匹配时间一样,而且还多了一些预处理时间,那为什么我们还要学习这个算法呢?虽然Ra ...
- Unity 使用TexturePackerGUI打包图集 Sprite 图片边上有线
原来遇到的问题 保存下解决方法 修改Shape Padding图片间距的值为4
- 在myeclipse的jsp编辑器中怎么把Source/Preview调出来的方法步骤
1.点击要打开的jsp 文件. 右键.选择 open with --> MyEclipse Visual JSP Designer 就好了. 2. 如果想所有的jsp 都默认使用 这个可视化 ...
- solr排序问题
搜搜引擎排序问题,因为涉及到的维度比较多,有时候单纯的依靠sort是无法满足需要的,例如:搜索商品的时候我希望不管怎么排无货的商品都置底,这样问题就来了,怎么排? 其实,solr是自己的解决 ...
- Mysql MHA(GTID)配置(实操)
实现环境 centos6.7 MYSQL5.6.36 主:192.168.1.191 从1:192.168.1.145 从2:192.168.1.146 监测:放在从2上 192.168.1.146 ...
- Java 特殊字符的String.split的分割(. \ * | \\)
特殊字符 分割的时候使用: 关于点的问题是用 : String.split("[.]"); String..split("\\.") ; 关于竖线的问题用 ...