Format Atlas

对比

Avro 与 CBOR

Apache Avro 按模式编码记录,并支持写入/读取模式解析及容器文件。CBOR 是一种通用二进制格式,其数据模型扩展了 JSON,可直接表示字节串和标签。

应该选择哪种格式?

数据管道需要受管理的模式、类型化记录和模式演进时,可考虑 Avro。协议需要 IETF 标准定义的通用二进制值、标签时,可考虑 CBOR。

适用于 Avro

按照定义好的模式交换记录

  • 跟踪模式版本的事件和数据管道

适用于 CBOR

在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据

  • 以紧凑二进制形式表示类似 JSON 的数据
  • 使用标准标签或应用自定义标签说明值的含义

基本信息

项目AvroCBOR
扩展名.avro.cbor
MIME 类型application/avroapplication/cbor
常见用途按照定义好的模式交换记录在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据
打开方式使用支持 Avro 的工具检查模式、字段、类型和记录。使用 CBOR 程序库或解码器读取,再通过诊断表示或类似 JSON 的视图检查内容。对于标签和字节串等无法直接映射到 JSON 的值,应确认其显示方式。
导出或转换转换为 JSON 或 Parquet 时,检查字段名、类型、空值、逻辑类型、记录数和模式兼容性。转换为 JSON 时,字节串和带标签的值可能需要工具专用的表示方式,因为 JSON 没有直接对应类型。用于签名、哈希或缓存键时,应遵循协议约定的编码规则,例如 RFC 8949 中的确定性编码。

按用途选择

跟踪模式版本的事件和数据管道

按照定义好的模式交换记录

Avro

以紧凑二进制形式表示类似 JSON 的数据

在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据

CBOR

使用标准标签或应用自定义标签说明值的含义

在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据

CBOR

关键点 1

解码 Avro 需要写入模式;对象容器文件可以携带该模式。CBOR 编码映射、标签等类型化数据项,但应用自己的模式演进需另行定义。

进一步了解差异

关键点 2

Avro 通过模式定义记录、union、枚举和逻辑类型。CBOR 定义整数、字节串、数组、映射和标签,不规定唯一的记录模式系统。

进一步了解差异

进一步了解差异

当生产者与消费者管理兼容模式并需要记录演进时使用 Avro。协议需要包含字节串或标签的通用紧凑二进制数据模型时使用 CBOR。确认模式分发、确定性编码要求和实现支持。

  • Avro 数据按写入模式解释,容器文件可包含该模式。CBOR 数据项携带二进制类型信息,但不会自动提供应用级模式契约。
  • Avro 模式解析可协调写入和读取模式。CBOR 标签可为常见数据项添加语义,但双方必须约定标签含义及处理方式。
  • 两者的字节编码不能互换。转换时检查 union、逻辑类型、默认值、缺失值、CBOR 标签、整数范围、字节串、确定性编码和未知扩展。

常见问题

CBOR 能否在没有模式时解码 Avro 数据?

不能。两者编码不同,解码 Avro 需要写入模式。转换必须明确把模式和值映射为 CBOR 数据项。

了解详情

参考资料与规范