对比
Avro 与 CBOR
Apache Avro 按模式编码记录,并支持写入/读取模式解析及容器文件。CBOR 是一种通用二进制格式,其数据模型扩展了 JSON,可直接表示字节串和标签。
应该选择哪种格式?
数据管道需要受管理的模式、类型化记录和模式演进时,可考虑 Avro。协议需要 IETF 标准定义的通用二进制值、标签时,可考虑 CBOR。
适用于 Avro
按照定义好的模式交换记录
- 跟踪模式版本的事件和数据管道
适用于 CBOR
在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据
- 以紧凑二进制形式表示类似 JSON 的数据
- 使用标准标签或应用自定义标签说明值的含义
基本信息
| 项目 | Avro | CBOR |
|---|---|---|
| 扩展名 | .avro | .cbor |
| MIME 类型 | application/avro | application/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 数据项。