几种序列化之间的比较Thrift&protocolbuffer&avro

 

thrift和avro都提供rpc服务和序列化,而 protocolbuffer只是提供序列化功能
Avro是强调一种高效的序列化,标准性的云计算的数据交换和存储的Protocol
Avro的创新之处在于融合了显式,declarative的Schema和高效二进制的数据表达,强调数据的自我描述,克服了以往单纯XML或二进制系统的缺陷。Avro对Schema动态加载功能,是Thrift编程接口所不具备的,符合了Hadoop上的Hive/Pig及NOSQL 等既属于ad hoc,又追求性能的应用需求.

Schema处理:
   a、thrift依赖IDL-->代码的生成,静态的。走代码生成,编译载入的流程。
   b、可以生成代码,后编译执行,但是还必须依赖IDL(meta元数据描述);也可以走动态解释执行IDL
序列化的方式:
   a、thrift
        提供多种序列化实现,TCompactProtocol,TBinaryProtocol
        每个Field前面都是带Tag的,这个Tag用于标识这个域的类型和顺序ID(IDL中定义,用于Versioning)。在同一批数据里面,这些Tag的信息是完全相同的,当数据条数大的时候这显然就浪费了。
      
   b、Avro,格式包括--》文件头中有schema+数据records(自描述)
       
         只对感兴趣的部分反序列化
         schema允许定义数据的排序order
         采用block链表结构,突破了用单一整型表示大小的限制。比如Array或Map由一系列Block组成,每个Block包含计数器和对应的元    素,计数器为0标识结束。

RPC的服务:
  a、 Avro提供了

        HttpServer : 缺省,基于Jetty内核的服务.

        NettyServer: 新的基于Netty的服务.

  b、Thrift提供了:

        TThreadPolServer: 多线程服务

        TNonBlockingServer: 单线程 non blocking的服务

        THsHaServer: 多线程 non blocking的服务



总结:
  • Thrift适用于程序对程序静态的数据交换,要求schema预知并相对固定
  • Avro在Thrift基础上增加了对schema动态的支持且性能上不输于Thrift
  • Avro显式schema设计使它更适用于搭建数据交换及存储的通用工具和平台,特别是在后台
  • 目前Thrift的优势在于更多的语言支持和相对成熟
  • PB具有跨平台、解析速度快、序列化数据体积小、扩展性高、使用简单的特点,但是内嵌并没有提供RPC的通讯


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值