当前位置: 首页 > news >正文

BSON(二进制 JSON)

BSON 二进制 JSON 完整通俗讲解

一、字面拆解

  • JSON:文本格式,人类可读字符串{"name":"张三","age":20}
  • BSON = Binary JSON二进制版的 JSON,把 JSON 文本转成二进制字节存储 / 传输

二、核心设计目的

JSON 是纯文本,有明显缺陷:

  1. 解析慢:字符串要反复转数字、判断类型
  2. 体积大:引号、逗号、大括号都是冗余字符
  3. 类型缺失:JSON 只有数字/字符串/布尔/数组/对象/null,没有日期、二进制、长整型、小数高精度类型

BSON 就是为了解决这些问题诞生,最典型使用场景:MongoDB 数据库底层存储、通信协议全部用 BSON。

三、BSON 和 JSON 的关键区别

1. 存储形式

  • JSON:UTF-8 文本字符串
{"id":1000000,"birth":"2025-01-01","score":95.5}
  • BSON:二进制字节流,机器直接读,人看不懂

2. 支持更多数据类型(最大优势)

JSON 做不到的,BSON 原生支持:

  1. Date 日期类型:毫秒时间戳存储,不用字符串存日期
  2. Binary 二进制字节:图片、文件、字节数组直接存,不用 Base64 编码(大幅省空间)
  3. Long 64 位长整数:JSON 数字是浮点数,超大整数会丢失精度,BSON 原生支持 long
  4. Decimal128 高精度小数:金融金额无精度丢失
  5. ObjectId、正则、时间戳、无符号整数等 Mongo 专属类型

3. 结构特点

BSON 每条文档结构固定:长度(4字节) + 键值对集合 + 结束标记(1字节)每个字段都自带类型标记,程序不用猜类型,解析速度远快于 JSON。

4. 读写性能对比

  • JSON:解析时要分词、去引号、字符串转数字,CPU 开销高
  • BSON:二进制带类型标识,直接按字节截取,序列化 / 反序列化更快

5. 体积

单纯简单小对象:BSON 可能略大(存了类型、长度头) 包含二进制、大数字、日期场景:BSON 远小于 JSON(JSON 要 Base64 存二进制,膨胀 33%)

四、举个直观例子

JSON 文本

{ "uid": 123456, "name": "小明", "createTime": "2026-07-05", "avatar": "二进制图片Base64字符串..." }

问题:日期是字符串、图片 Base64 膨胀、uid 大数可能精度丢失

等价 BSON 二进制内部逻辑

  1. uid:类型标记 Int64 + 键名 uid + 数字 123456(二进制存储)
  2. name:字符串类型 + "小明"
  3. createTime:Date 类型 + 毫秒时间戳(数字,不是文本)
  4. avatar:Binary 类型 + 原始图片字节(无需 Base64)

五、常见使用场景

  1. MongoDB:数据库磁盘存储、客户端与服务端通信全部使用 BSON
  2. 高性能 RPC / 消息中间件:追求序列化速度、需要传二进制数据
  3. 存储带图片、文件、高精度金额的结构化数据

六、一句话总结

BSON 是带完整类型信息的二进制 JSON 扩展格式,牺牲人类可读性,换取更快解析、更丰富数据类型、原生支持二进制文件存储,是 MongoDB 的底层标准格式。

http://www.jsqmd.com/news/1144867/

相关文章:

  • 【8】补充与拓展:Langchain的联网搜索Agent,使用Tavily工具
  • 穿透物理边界,重构时空秩序:基于纯视觉的营房全景透视与无感智控
  • Java集合扩容机制解析:ArrayList与HashMap底层原理及性能差异
  • 2026降AIGC革命:AI率92%暴降至5%!实测10款AI智能降重工具!10款工具深度解析!
  • 联合动力泰国工厂批量交付电驱系统,商用车业务占比约两成
  • 程序员就业:接口、数据和评估怎么串
  • Sentinel 流量治理实战:熔断降级限流 + Nacos 持久化
  • PLC控制气缸与电磁阀:从基础原理到多设备协同实战
  • 卡美德生物科普:CD244(2B4)在干细胞培养中的双向调控机制与应用
  • Orion与Shilpa Medicare深化合作,共同开发并供应欧洲市场纳武利尤单抗生物类似药
  • Dromara Sureness:把 REST API 鉴权这事做薄做快
  • Java随笔-GC收集器工作机制
  • 研究生招生专业目录 API 接口
  • 2026实测盘点:16款降AI率工具测评,这款让导师都夸“原创性强”!
  • OmenSuperHub终极指南:解锁惠普暗影精灵笔记本的完整性能控制权
  • Linux 神器 tmux 超详细入门教程:会话持久化 + 多窗口管理一网打尽
  • Kani:Rust开源模型检查器,为安全属性提供正确性保证并发现未知漏洞!
  • PyTorch 2.0 静态量化实战:ResNet-18 模型大小压缩 75%,推理速度提升 3 倍
  • LLM大模型 - 大模型及其训练方式
  • React Loadable:给 React 应用做代码分割的老牌方案
  • ResNet-50 PyTorch 迁移学习实战:CIFAR-10 数据集 5 分钟达到 92% 准确率
  • 为知笔记导出到本地 Markdown,老笔记也能重新用起来
  • C语言操作符和输入输出函数
  • HTML打包EXE多实例共享进程:多开更快还能共享登录
  • 从一条用户评论到Browser Bridge的新功能-Tab隔离
  • 基于Java的助老助残服务平台
  • C++之获取内存地址std::addressof
  • AI能改变秋冬服装行业吗?很多企业已经给出了答案
  • 三分钟安装Claude Code 最新版安装教程----简单易懂版本
  • CentOS 企业网络管理入门实战:打通网络理论与服务器实操壁垒