BSON: Binary JSON 研究
一种数据交换格式,用于 MongoDB 的数据存储和网络格式传输,也可以用于任何支持二进制和 BSON 协议的服务。
对比 JSON
可以理解为:二进制的 JSON。
借助官方 SDK,可以用类似 JSON 的方式描述数据结构,并且将其编译为二进制。
1 | const BSON = require("bson"); |
为什么使用 BSON?
- 更快的遍历速度:不需要对 json 进行字符串解析,而是直接保存元素长度在头部,直接进行
seek()
即可 - 修改数据移动更少:对于 json,将 9 改为 10,字符变多,后面数据都需要移位;bson 可以指定类型(如代码所示),从而提前开辟空间。
- 数据类型更全面
参考链接
- https://zh.wikipedia.org/wiki/BSON
- https://blog.csdn.net/hfismyangel/article/details/79669032
- http://bsonspec.org/
EJSON 研究
它是 JSON 的扩展语法,和 BSON 类似,由 MongoDB 提出。
对比 JSON
本质上还是 JSON,只是支持更多的数据类型表示。
而这些数据类型,最终都会被转换为 JSON。
例如 EJSON 中Date
类型代表日期,那么它会被转为:
1 | date: { '$date': '2020-08-25T05:38:03.179Z' } |
类似的还有 GEO(地理位置)、Point(图形)等高级数据类型。
对比 BSON
它的高级类型和 BSON 高级类型是通用的,开发时,均使用bson.js
这个库即可。
示例代码:
1 | const BSON = require("bson"); |
输出:
1 | { |
优点
对比 JSON:
- 支持更高级的数据类型
- 高级类型会被转化为 JSON,兼容性好
对比 BSON:
- 不是二进制,语义化更明显
- 可以在任何平台交换数据,例如一些不支持二进制的浏览器