目录
[什么是 JSON](#什么是 JSON)
[什么是 BSON](#什么是 BSON)
[MongoDB 使用 BSON 还是 JSON](#MongoDB 使用 BSON 还是 JSON)
[JSON 与 BSON](#JSON 与 BSON)
- JSON 和 BSON 是近亲,正如它们几乎相同的名称所暗示的那样
- JSON(即 JavaScript 对象表示法)是网络上广泛流行的数据交换标准
- BSON(二进制 JSON)就是基于该标准
什么是 JSON
- JSON(即 JavaScript 对象表示法)是一种人类可读的数据交换格式,在 2000 年代初指定
- 尽管 JSON 是基于 JavaScript 编程语言标准的子集,但它完全独立于语言
- JSON 对象是关联容器,其中字符串键映射到值(可以是数字、字符串、布尔值、数组、空值 --- null,甚至是另一个对象)
- 几乎所有编程语言都有这种抽象数据结构的实现---JavaScript 中的对象、Python 中的字典、Java 和 C# 中的哈希表、C++ 中的关联数组等等
- JSON 对象易于人类理解,也易于机器解析和生成
- 主要用于:
- APIs
- 配置文件
- 记录消息
- 数据库存储
MongoDB-JSON连接
- MongoDB 从一开始就被设计为一个专注于提供出色开发体验的数据库
- JSON 的普遍存在使其成为表示 MongoDB 文档数据模型中的数据结构的明显选择
- 然而,有几个问题使得 JSON 不太适合在数据库内部使用
- 1-JSON 仅支持有限数量的基本数据类型;最值得注意的是,JSON 缺乏对日期和二进制数据的支持
- 2-JSON 对象和属性没有固定长度,这使得遍历速度变慢
- 为了使 MongoDB 成为 JSON 优先,但仍然具有高性能和通用性
- BSON 的发明弥补了这一差距:一种以 JSON 格式存储数据的二进制表示形式,并针对速度、空间和效率进行了优化
什么是 BSON
- BSON 代表"二进制 JSON",这正是它被发明的目的
- BSON 的二进制结构对类型和长度信息进行编码,这使得它的遍历速度比 JSON 快得多
- BSON 添加了一些非 JSON 原生数据类型,例如日期和二进制数据,如果没有这些数据类型,MongoDB 将失去一些有价值的支持
- 以下是一些示例:JSON 对象及其相应的 BSON 表示形式
MongoDB 使用 BSON 还是 JSON
- MongoDB 在内部和网络上以 BSON 格式存储数据,但这并不意味着您不能将 MongoDB 视为 JSON 数据库
- 您可以用 JSON 表示的任何内容都可以本机存储在 MongoDB 中,并且可以在 JSON 中轻松检索
- 当使用您最喜欢的编程语言的 MongoDB 驱动程序时,您将使用该语言的本机数据结构
- 当查询数据库时,驱动程序将负责将数据转换为 BSON 并返回
- 与将 JSON 存储为字符串编码值或二进制编码 blob 的系统不同,MongoDB 使用 BSON 在 Web 最流行的数据格式之上提供强大的索引和查询功能
- 例如,MongoDB 允许开发人员通过 JSON/BSON 文档中的特定键查询和操作对象
- 甚至在深入记录的多层嵌套文档中,在那些相同的键和值上可以创建高性能索引
JSON 与 BSON
- JSON 和 BSON 在设计上确实是近亲
- BSON 被设计为 JSON 数据的二进制表示形式,具有针对更广泛应用的特定扩展,并针对数据存储和遍历进行了优化
- 就像 JSON 一样,BSON 支持嵌入对象和数组
- BSON 与 JSON 的一个特殊区别在于它支持一些更高级的数据类型
- 例如,JSON 不区分整数(整数)和浮点数(具有不同程度的小数精度)
架构灵活性和数据治理
- 对于使用具有 JSON 和 BSON 数据模型的数据库的开发人员来说
- 最大的吸引力之一是与关系数据库使用的严格的表格数据模型相比,它们提供的动态且灵活的模式
- 首先,MongoDB 文档是多态的------单个集合中不同文档的字段可能不同(类似于关系数据库中的表)
- 这种灵活性使得对任何结构的数据进行建模并根据需求变化调整模型变得更加容易
- 其次,不需要向数据库声明文档的结构------文档是自描述的;开发人员可以开始编写代码并在创建对象时保留它们
- 最后,如果需要将新字段添加到文档中,则可以在不影响集合中的所有其他文档的情况下创建新字段,无需更新中央系统目录,也无需使数据库脱机
- 当您需要更改数据模型时,文档数据库会继续存储更新的对象,而无需执行昂贵的 ALTER TABLE 操作 - 或者更糟糕的是,必须从头开始重新设计架构