点一下关注吧!!!非常感谢!!持续更新!!!
🚀 AI篇持续更新中!(长期更新)
AI炼丹日志-31- 千呼万唤始出来 GPT-5 发布!"快的模型 + 深度思考模型 + 实时路由",持续打造实用AI工具指南!📐🤖
💻 Java篇正式开启!(300篇)
目前2025年10月07日更新到:
Java-141 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(3)
MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务正在更新!深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!
大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

BSON
基本介绍
BSON(Binary JSON)是一种二进制形式的存储格式,它扩展了JSON的数据表示能力。与JSON类似,BSON采用键值对的方式组织数据,支持嵌套的文档对象和数组对象。以下是BSON的主要特点:
数据类型支持
BSON在JSON原有的数据类型基础上,增加了多种特殊数据类型:
- Date类型:用于存储日期时间信息
- Binary Data类型:用于存储二进制数据
- 其他类型:如ObjectId(MongoDB专用)、Timestamp等
应用场景
BSON主要应用于以下场景:
- MongoDB数据库的默认数据存储格式
- 网络数据交换格式
- 二进制数据序列化
性能特点
BSON的优势和劣势:
- 优点:
- 数据类型丰富,能更好地表示复杂数据
- 解析速度比JSON更快
- 支持直接存储二进制数据
- 缺点:
- 存储空间利用率相对较低
- 人类可读性不如JSON
实例对比
JSON示例:
json
{
"name": "John",
"age": 30,
"birthday": "1990-01-01"
}
对应的BSON表示会包含更多类型信息,如将birthday存储为Date类型而非字符串。
技术实现
BSON在实现上:
- 使用二进制编码
- 包含长度前缀以便快速遍历
- 支持直接修改部分内容而无需重新解析整个文档
这种设计使其特别适合作为数据库存储格式和网络传输格式。
{key1:value1, key2:value2} 是一个典型的 BSON(Binary JSON)文档示例。在BSON格式中:
- 键(key)部分:
- 必须是字符串类型(UTF-8编码)
- 通常采用类似JSON的命名规范,如"userName"、"age"
- 示例:"firstName":"John"
- 值(value)部分支持多种数据类型:
- 数值类型:
- Double(双精度浮点数):如"price":19.99
- Int32(32位整数):如"age":25
- Int64(64位整数):如"population":7800000000
- 字符串:如"name":"Alice",必须是UTF-8编码
- 日期:如"createdAt":ISODate("2023-05-15T08:30:00Z")
- 数组:如"tags":["mongodb","database","NoSQL"]
- 嵌套文档:如"address":{"street":"Main St","city":"New York"}
- 布尔值:如"active":true
- Null:如"middleName":null
- 二进制数据:如图片、文件等
- 特殊类型:如ObjectId、正则表达式等
BSON的典型应用场景包括MongoDB数据库文档存储、网络数据传输等。与JSON相比,BSON提供了更丰富的数据类型支持和更高效的二进制编码方式。例如,一个完整的用户文档可能如下:
json
{
"_id": ObjectId("507f1f77bcf86cd799439011"),
"username": "user123",
"email": "user@example.com",
"age": 28,
"joinedAt": ISODate("2023-01-15T10:30:00Z"),
"interests": ["coding","reading","hiking"],
"address": {
"street": "123 Main St",
"city": "San Francisco",
"zip": "94105"
},
"active": true
}
基本特点
BSON(Binary JSON)作为一种二进制编码格式,主要具有以下三个显著特点:
-
轻量性
- 采用紧凑的二进制编码方式,相比JSON文本格式可节省30%-40%的存储空间
- 特别适合网络传输和磁盘存储,减少I/O开销
- 典型应用场景:MongoDB文档存储、网络API数据传输
-
可遍历性
- 保留类似JSON的层次结构,支持快速定位和解析特定字段
- 内置长度前缀机制,解析时无需扫描整个文档
- 示例:可以直接跳转到文档中的第N个元素,无需解析前面所有内容
-
高效性
- 编码/解码速度比文本JSON快5-10倍
- 支持多种数据类型(如Date、Binary等)的原生表示
- 在MongoDB中查询BSON文档时,性能明显优于同等JSON文档
这些特点使BSON在需要高性能数据交换的场景(如数据库存储、实时通信等)中具有明显优势。
MongoDB中的文档存储机制
MongoDB采用了BSON(Binary JSON)作为其核心数据存储和交换格式。BSON是一种二进制编码的类JSON格式,它在保持JSON基础结构的同时提供了更高效的存储和更丰富的数据类型支持。
文档(Document)概念解析
在MongoDB中,文档是数据存储的基本单元,相当于关系型数据库中的记录(Record)。但与关系型记录相比,MongoDB文档具有以下特点:
- 灵活的结构:文档不需要预先定义固定模式(schema-less),每个文档可以有不同的字段结构
- 嵌套支持:文档可以包含嵌套的子文档和数组
- 丰富的数据类型:支持字符串、数字、日期、二进制数据、对象ID等多种数据类型
文档示例
一个典型的MongoDB文档可能如下所示:
json
{
"_id": ObjectId("507f1f77bcf86cd799439011"),
"name": "张三",
"age": 28,
"address": {
"city": "北京",
"district": "海淀区"
},
"hobbies": ["游泳", "阅读", "摄影"],
"created_at": ISODate("2023-01-15T10:30:00Z")
}
与关系型数据库的对比
特性 | MongoDB文档 | 关系型记录 |
---|---|---|
结构 | 动态模式 | 固定模式 |
嵌套 | 支持 | 需要通过外键关联 |
查询 | 面向文档 | 面向表 |
扩展 | 水平扩展容易 | 通常垂直扩展 |
应用场景
MongoDB的文档模型特别适合以下场景:
- 内容管理系统(CMS)中存储不同结构的文章
- 电子商务平台中存储带有变体的产品信息
- 社交网络中的用户资料存储
- 物联网(IoT)设备产生的异构数据
这种灵活的文档模型使得MongoDB能够很好地适应现代应用开发中数据模型频繁变化的需求。

BSON中的类型举例
BSON(Binary JSON)是一种二进制编码格式,主要用于MongoDB数据库存储和网络传输。相比JSON,BSON提供了更丰富的数据类型支持。以下是BSON中主要的类型及其详细说明:
基本数据类型
-
Double(双精度浮点数)
- 64位浮点数(IEEE 754标准)
- 示例:
3.141592653589793
- 适用于需要高精度计算的数值
-
String(字符串)
- UTF-8编码的字符串
- 示例:
"Hello World"
- 最大长度约为16MB
-
Object(对象/文档)
- 嵌套的BSON文档
- 示例:
{"name": "John", "age": 30}
-
Array(数组)
- 值的有序集合
- 示例:
["apple", "banana", "orange"]
-
Binary data(二进制数据)
- 任意二进制数据
- 示例:图片、音频文件等
- 可以指定子类型(generic, function, UUID等)
特殊数据类型
-
ObjectId(对象ID)
- MongoDB文档默认的12字节唯一标识符
- 格式:
5f9d7b3b9d7b3b0001d86e93
- 包含时间戳、机器标识、进程ID和计数器
-
Boolean(布尔值)
- true或false
- 示例:
{"isAdmin": true}
-
Date(日期)
- 64位整数表示自Unix纪元(1970-1-1)以来的毫秒数
- 示例:
new Date("2023-05-15T08:00:00Z")
-
Null(空值)
- 表示空值或缺失字段
- 示例:
{"middleName": null}
数值类型
-
Integer(整数)
- 32位有符号整数
- 示例:
42
-
Timestamp(时间戳)
- 特殊内部类型,用于MongoDB操作日志
- 格式:
Timestamp(1617890123, 1)
- 第一个数字是秒数,第二个是递增计数器
-
Long(长整数)
- 64位有符号整数
- 示例:
NumberLong("1234567890123456789")
其他类型
-
Decimal128(高精度十进制数)
- 128位十进制浮点数
- 示例:
NumberDecimal("3.141592653589793238462643383279502884")
- 适用于金融计算等需要精确小数表示的场景
-
Regular Expression(正则表达式)
- 存储正则表达式模式
- 示例:
{"pattern": /^[A-Za-z]+$/i}
-
JavaScript代码
- 可以存储JavaScript代码
- 示例:
{"code": function(x) { return x * x; }}
-
MinKey和MaxKey
- 特殊类型,表示所有BSON值中的最小值和最大值
- 用于比较操作和范围查询
这些丰富的类型系统使BSON比JSON更适合作为数据库存储格式,能够更精确地表示各种数据结构和特殊值。在MongoDB中,这些类型的使用会影响索引、查询和聚合操作的性能和行为。
官方服务
MongoDB官方提供了完善的云数据库服务MongoDB Atlas,这是一个完全托管的云数据库服务,支持在全球多个云平台(AWS、Azure、Google Cloud)上部署。我们可以直接在MongoDB官方网站https://cloud.mongodb.com/访问这项服务。
MongoDB Atlas提供以下主要功能:
- 自动化的数据库部署和管理
- 内置的安全防护措施
- 灵活的扩展选项
- 全面的监控和分析工具
对于开发者来说,最吸引人的是MongoDB Atlas提供了一个免费的服务器集群(M0层),主要特点包括:
- 512MB存储空间
- 共享RAM资源
- 适合开发和测试环境使用
- 支持基本的集群功能
注册流程非常简单:
- 创建MongoDB账户
- 选择云服务提供商和区域
- 选择"M0"免费套餐
- 配置基本的集群设置
- 创建数据库用户
- 设置IP白名单
这个免费集群足够支持小型应用开发和测试,是学习MongoDB和进行原型开发的理想选择。对于生产环境,可以根据需求升级到更高性能的付费套餐。

我们可以使用任意的方式连到服务器上: