Format Atlas

对比

BSON 与 MessagePack

BSON 和 MessagePack 都可表示类似文档的二进制数据,但 BSON 是与 MongoDB 相关的类型化文档表示,MessagePack 是通用对象序列化格式。

应该选择哪种格式?

MongoDB 文档以及 ObjectId、日期等 BSON 专有值请用 BSON。MongoDB 之外交换紧凑对象时可考虑 MessagePack,并事先约定扩展类型和接收端支持。

适用于 BSON

序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档

  • 保留日期和二进制数据等类型
  • 使用能够读写 BSON 的驱动程序和工具

适用于 MessagePack

将类似 JSON 的数据序列化为二进制 · 在兼容的应用程序之间交换结构化数据

  • 以二进制编码类似 JSON 的数组、映射和基本值
  • 在兼容的程序库之间交换扩展类型和时间戳

基本信息

项目BSONMessagePack
扩展名.bson.msgpack, .mpk
MIME 类型application/bsonapplication/octet-stream
常见用途序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档将类似 JSON 的数据序列化为二进制 · 在兼容的应用程序之间交换结构化数据
打开方式可用 mongorestore 或支持 BSON 的工具、程序库读取。要查看内容,可先转换为 Extended JSON 等可读表示。不要用文本编辑器修改二进制文件。使用支持 MessagePack 的程序库或解码器读取。要检查内容,可查看诊断表示或类似 JSON 的视图,并确认二进制值和扩展值的显示方式。
导出或转换转换为 JSON 时,日期、ObjectId 和二进制值可能需要使用 Extended JSON 写法或应用专用表示,因为标准 JSON 没有对应类型。如果需要往返转换,应选择能保留类型信息的方法,并用实际数据测试。转换为 JSON 时,二进制值和扩展值可能需要表示成数组、字符串或工具专用封装,因为标准 JSON 没有直接对应类型。若需往返转换,请用实际数据检查类型、数值范围、时间戳、映射键和扩展类型。

按用途选择

保留日期和二进制数据等类型

序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档

BSON

使用能够读写 BSON 的驱动程序和工具

序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档

BSON

以二进制编码类似 JSON 的数组、映射和基本值

将类似 JSON 的数据序列化为二进制 · 在兼容的应用程序之间交换结构化数据

MessagePack

在兼容的程序库之间交换扩展类型和时间戳

将类似 JSON 的数据序列化为二进制 · 在兼容的应用程序之间交换结构化数据

MessagePack

关键点 1

BSON 定义带长度前缀的文档和数组,并提供日期、ObjectId、Decimal128 等显式类型。MessagePack 提供通用映射、数组、数字、字符串、二进制值和应用自定义扩展。

进一步了解差异

关键点 2

BSON 适合 MongoDB 文档模型及相关工具;MessagePack 用于不依赖特定数据库的通用序列化。

进一步了解差异

进一步了解差异

需要 MongoDB 兼容文档类型时选 BSON;需要独立于数据库的二进制对象协议时选 MessagePack。转换前映射日期、整数宽度、十进制数、ObjectId 和扩展值,并测试往返。

  • 两者都采用二进制编码,但结构和类型系统不同,不能直接互相读取。
  • BSON 有文档相关的专用类型与约定。MessagePack 扩展类型的含义需由应用定义。
  • 转换可能更改日期、数值范围、十进制数或标识符语义。请记录映射并用接收端实现验证值。

常见问题

把 BSON 文件改名为 MessagePack 就可以转换吗?

不可以。改扩展名不会转换二进制结构和类型;必须使用解码器及明确字段映射重新序列化。

了解详情

参考资料与规范