BSON
外观
扩展名 |
.bson |
---|---|
互联网媒体类型 |
无[1] |
格式类型 | 数据交换 |
扩展自 | JSON |
标准 | 尚无RFC |
网站 | bsonspec |
BSON(/ˈbiːsən/)是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式。它是一种二进制表示形式,能用来表示简单数据结构、关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。BSON之名缘于JSON,含义为Binary JSON(二进制JSON)[2]。
数据类型和语法
[编辑]BSON文档(对象)由一个有序的元素列表构成。[3][4]每个元素由一个字段名、一个类型和一个值组成。字段名为字符串。类型包括:
- string
- integer(32或64位)
- double(64位IEEE 754浮点数)
- decimal128(128位IEEE 754-2008浮点数;Binary Integer Decimal变体),适合作为任意精度为34个十进制数字的数字载体,最大值近似106145
- date(整数,自UNIX时间的毫秒数)
- byte array(二进制数组)
- 布尔(
true
或false
) - null
- BSON对象
- BSON数组
- JavaScript代码
- MD5二进制数据
- 正则表达式(Perl兼容的正则表达式,即PCRE,版本8.41,含UTF-8支持;与Python不完全兼容)[5]
BSON的类型名义上是JSON类型的一个超集(JSON没有date或字节数组类型[6]),但一个例外是没有像JSON那样的通用“数字”(number)类型。
效率
[编辑]与JSON相比,BSON着眼于提高存储和扫描效率。BSON文档中的大型元素以长度字段为前缀以便于扫描。在某些情况下,由于长度前缀和显式数组索引的存在,BSON使用的空间会多于JSON。[2]
例子
[编辑]一个内容为{"hello":"world"}的文档将存储为:
Bson:
\x16\x00\x00\x00 // 总文档大小
\x02 // 0x02 = 类型:String(字符串)
hello\x00 // 字段名
\x06\x00\x00\x00world\x00 // 字段值(值大小,值,空终止符)
\x00 // 0x00 = 类型:EOO('end of object',对象结尾)
参见
[编辑]- 数据系列化格式比较
- JSON
- CBOR
- Smile(二进制JSON)
- UBJSON
- Protocol Buffers
- Action Message Format
- Thrift
- MessagePack
- 面向文档的数据库
- ASN.1
- Wireless Binary XML(WBXML)
- Efficient XML Interchange
参考文献
[编辑]- ^ MIME Media Types - The Internet Assigned Numbers Authority. [2018-03-18]. (原始内容存档于2012-12-21).
- ^ 2.0 2.1 BSON Specification. [2018-03-18]. (原始内容存档于2011-09-28).
- ^ BSON (Binary JSON): Specification. [2018-01-17]. (原始内容存档于2018-01-17).
- ^ Introducing NoSQL and MongoDB | What Is NoSQL? | InformIT. [2018-01-17]. (原始内容存档于2018-01-17).
- ^ regex – Tools for representing MongoDB regular expressions — PyMongo 3.6.0 documentation. [2018-01-17]. (原始内容存档于2018-01-18).
- ^ JSON Specification. [2018-03-18]. (原始内容存档于2011-02-23).