protobuf和thrift对比

来源:互联网 发布:网络个人信息泄露案例 编辑:程序博客网 时间:2024/06/07 06:23

数据类型

protobufthriftprotobufthriftprotobufthriftprotobufthriftdoubledoublefloat  byte i16int32i32int64i64uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 boolboolstringstringbytesbinarymessagestructenumenumserviceservice

综合对比

 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二进制535thrift压缩473protobuf477

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

thrift二进制306034thrift压缩304256protobuf177652

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

thrift二进制287972thrift压缩315991protobuf157192

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

1 0
原创粉丝点击