Structured Data

17th October 2020 at 8:09am

结构化数据,有时也称消息交换格式(message interchange format)。一般用在编程语言中,将某一内存结构编码(encode / marshal / serialize)成字节序列,反之亦然。

按编码后的字节序列是否人类可读,分为:

  • 文本格式:如 JSON, XML
  • 二进制格式:如 Protobuf, Thrift

文本格式对比二进制格式:

  • 二进制格式占用更少的空间(序列化后)
  • 二进制格式序列化、反序列化时,性能更高
  • 文本格式更容易使用,可以手写、肉眼可读

对比各种格式 / 序列化框架时,考虑几点:

  • 时空效能(efficiency),比如序列化、反序列化性能,序列化后的大小
  • 是否语言、平台中立
  • 开发起来是否简单、快速
  • 是否提供一种 IDL,用来描述数据本身的格式
  • 基础数据类型有何差异,比如 pb2 中并没有 map 结构,Thrift 有;是否支持组合类型
  • 是否支持范型、反射等高级能力
  • 这些协议经常用在 RPC 场景中,存在客户端和服务器的角色,因此要考虑:
    • 两方的协议格式文件变动,引起的兼容性问题。比如新增字段、删除字段等

Resources

TOC