BSON
BSON(/ˈbiːsən/)是一種計算機數據交換格式,主要被用作MongoDB數據庫中的數據存儲和網絡傳輸格式。它是一種二進制表示形式,能用來表示簡單數據結構、關聯數組(MongoDB中稱為「對象」或「文檔」)以及MongoDB中的各種數據類型。BSON之名緣於JSON,含義為Binary JSON(二進制JSON)[2]。
副檔名 |
.bson |
---|---|
網路媒體型式 |
無[1] |
格式類型 | 數據交換 |
延伸自 | JSON |
標準 | 尚無RFC |
網站 | bsonspec |
數據類型和語法
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',对象结尾)
參見
參考文獻
- ^ 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).