protobuf和thrift对比

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt383

数据类型

protobufthriftprotobufthriftprotobufthriftprotobufthrift
doubledoublefloat  byte i16
int32i32int64i64uint32 uint64 
sint32 sint64 fixed32 fixed64 
sfixed32 sfixed64 boolboolstringstring
bytesbinarymessagestructenumenumserviceservice

综合对比

 protobufthrift
功能特性主要是一种序列化机制提供了全套RPC解决方案,包括序列化机制、传输层、并发处理框架等
支持语言C++/Java/PythonC++, 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
protobuf477

序列化(1500W次)时间(ms)

thrift二进制306034
thrift压缩304256
protobuf177652

反序列化(1500W次)时间(ms)

thrift二进制287972
thrift压缩315991
protobuf157192

thrift的时间测试可能不是很准,由于thrift产生代码的复杂性,编写的测试代码为了适应其接口,在调用堆栈上可能有一些额外开销。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值