最新消息:请随时分享你的乐趣!

各种序列化与反序列化的性能和使用场景

技术博客 磊子 809浏览 0评论
目录
[隐藏]

现在各个公司都有自己的序列化框架,层出不穷,下面是各种序列化反序列化框架的性能比较和技术场景选型。

Java各种序列化性能比较

total

size

deser

ser

createtime

从上图可得出如下结论:

  1. XML 序列化( Xstream)无论在性能和简洁性上比较差;
  2. ThriftProtobuf 相比在时空开销方面都有一定的劣势;
  3. ProtobufAvro 在两方面表现都非常优越。

选型建议:

以上描述的五种序列化和反序列化协议都各自具有相应的特点,适用于不同的场景。

  1. 对于公司间的系统调用,如果性能要求在 100ms 以上的服务,基于 XML 的 SOAP 协议是
    一个值得考虑的方案。
  2. 基于 Web browser 的 Ajax,以及 Mobile app 与服务端之间的通讯, JSON 协议是首选。对
    于性能要求不太高,或者以动态类型语言为主,或者传输数据载荷很小的的运用场景, JSON
    也是非常不错的选择。
  3. 对于调试环境比较恶劣的场景,采用 JSONXML 能够极大的提高调试效率,降低系统
    开发成本。
  4. 当对性能和简洁性有极高要求的场景, ProtobufThriftAvro 之间具有一定的竞争关系。
  5. 对于 T 级别的数据的持久化应用场景, ProtobufAvro 是首要选择。如果持久化后的数据
    存储在 Hadoop 子项目里, Avro 会是更好的选择。
  6. 由于 Avro 的设计理念偏向于动态类型语言,对于动态语言为主的应用场景, Avro 是更好
    的选择。
  7. 对于持久层非 Hadoop 项目,以静态类型语言为主的应用场景, Protobuf 会更符合静态类型
    语言工程师的开发习惯。
  8. 如果需要提供一个完整的 RPC 解决方案, Thrift 是一个好的选择。
  9. 如果序列化之后需要支持不同的传输层协议,或者需要跨防火墙访问的高性能场景,
    Protobuf 可以优先考虑。

转载请注明:印迹. » 各种序列化与反序列化的性能和使用场景

发表我的评论
取消评论

表情