数据的序列化
一、什么是序列化
数据在网络间要进行通信,将数据结构或对象编码,然后在网络间传输就是序列化过程。
反之的解码就是反序列化的过程。
附:
- POJO(Plain old java object),或者JavaBean,POJO只有setter和getter方法。
- IDL(interface description language)文件。参与通讯的各方需要对通讯的内容需要做相关的约定。IDL用来撰写协议约定。
二、几种常见的序列化和反序列化协议
1、XML&SOAP
- XML一种常用的序列化和反序列化协议。具有跨机器,跨语言等优点。
- SOAP(SIMPLE Object Access Protocol)是一种广泛应用的,基于XML为序列化和反序列化协议的结构化消息传递协议。IDL是WSDL。在传输层的协议,SOAP最常见的使用方式XML+HTTP。
SOAP协议具有广泛的群众基础。基于HTTP的传输协议使得其在穿越防火墙时有良好的安全特性。对于公司之间传输数据相对小或者实时性相对低的服务是个好选择。但是数据量大的时候,内存和磁盘开销比较大,因此不适合用XML。XML序列化和反序列化的开销比较大,如果对于延时性较低的场景不适用。
2、JSON(Javascript Object Notation)
适用场景
- 数据量小,实时性相对较低的服务
- 居于Web brower的Ajax请求
- 由于JSON具有非常强的前后兼容性,对于接口经常变化,并对可调式性要求高的场景。
- 由于JSON的典型应用场景是JSON+HTTP,适合跨防火墙访问。
3、Thrift
Thrift是Facebook开源提供的一个高性能,轻量级RPC服务框架,其产生正是为了满足当前大数据量,分布式、跨语言、跨平台数据通讯的需求。但是Thrift并不仅仅是序列化协议,而是一个RPC框架。
适用场景
- 对于需求为高性能,分布式的RPC服务,Thrift是一个优秀的解决方案。它支持众多语言和丰富的数据类型。
缺点,安全性是个问题。无法支持向持久层直接读写数据。所以不适合做数据持久化序列化协议
4、Protobuf
- 对工程师友好
- 序列化数据非常简介、紧凑、与XML相比其序列化之后的数据量约为1\3到1\10。
- 解析速度非常块
- 使用简洁
5、Avro
有两种序列化格式:Json或Binary格式。Binary格式在空间开销和性能方面可媲美Protobuf。JSON格式目前是试验阶段。Avro在做文件持久化的时候,一般会和Schema一起存储,所以Avro序列化文件自身具有自我描述属性,所以非常适合于做Hive、Pig和MapReduce的持久化数据格式。
谢谢!