BSON 是什么
BSON代表Binary JSON。它是一种二进制文件格式,用于以二进制编码格式存储序列化的JSON文件。它于2009年由MongoDB开发。MongoDB数据库有几种只对MongoDB特别感兴趣的标量数据格式,因此他们开发了BSON数据格式用于在网络上传输文件。尽管该格式是专门为MongoDB开发的,但根据业务需求,可以在任何地方使用它。
它与JSON有几个相似之处,例如BSON也支持在其他文档中的嵌套文档和数组,但仍然有许多明显的区别。有关JSON和BSON之间差异的更多信息,请参考此文章。
示例BSON文档
考虑以下JSON文档:
{
"hello" : "world"
}
它的BSON等效形式是:
x16\x00\x00\x00 // Size of the Document
\x02 // 0x02 = type String
hello\x00 // field name
\x06\x00\x00\x00world\x00 // field value
\x00 // Used to represent end of object
其中“\x01”表示0000 0001。
BSON文档的特点: 以下是BSON文档的三个主要特点-
- 轻量级 - 数据传输过程中的开销一般指不必要的额外比特(如校验和、奇偶校验等)。这些比特通常作为标头的一部分与数据一起传输。BSON将空间开销保持在最低限度,使其在任何网络上传输时都可以轻巧。
- 可遍历 - BSON被设计成具有高度遍历性。由于其二进制结构支持类型和长度编码,因此可以很容易且快速地进行解析。
- 高效 - BSON支持高效的数据编码和解码。数据可以很容易、很快地编码和解码为BSON。
为什么选择BSON?
使用BSON进行数据传输有以下优势-
- BSON可以很容易且快速地解析,因为它支持类型和长度编码,得益于其二进制结构。
- BSON对象的设计目标是具有高度遍历性和轻巧性,因此它是数据传输的更好选择。
- 与JSON对象相比,它占用更少的空间并提供更快的扫描速度。
- 它提供了广泛的数据类型,如日期类型等,其中许多类型在JSON中不受支持。
BSON支持的数据类型: 以下是BSON支持的数据类型-
| 序号 | 数据类型 | 大小(字节) |
|---|---|---|
| 1 | 字节 | 1 |
| 2 | int32 | 4 |
| 3 | int64 | 8 |
| 4 | uint64 | 8 |
| 5 | double | 8 |
| 6 | decimal128 | 16 |
| 7 | date | 8 |
| 8 | objectId | 12 |
| 9 | array | 根据数据大小(例如 – 字节数组使用1字节) |
BSON使用的缺点:
BSON支持快速遍历BSON文档。为了支持它,BSON在文档中添加了额外的信息(如子对象的长度等)。在某些情况下,这会导致文档大小增加,并降低与JSON相比的效率。
极客教程