BSON/ˈbsən/)是一種計算機數據交換格式,主要被用作MongoDB數據庫中的數據存儲和網絡傳輸格式。它是一種二進制表示形式,能用來表示簡單數據結構關聯數組(MongoDB中稱為「對象」或「文檔」)以及MongoDB中的各種數據類型。BSON之名緣於JSON,含義為Binary JSON(二進制JSON)[2]

BSON
副檔名
.bson
網路媒體型式
[1]
格式類型數據交換
延伸自JSON
標準尚無RFC
網站bsonspec.org

數據類型和語法

BSON文檔(對象)由一個有序的元素列表構成。[3][4]每個元素由一個字段名、一個類型和一個值組成。字段名為字符串。類型包括:

  • string
  • integer(32或64位)
  • double(64位IEEE 754浮點數)
  • decimal128(128位IEEE 754-2008浮點數;Binary Integer Decimal英語Binary Integer Decimal變體),適合作為任意精度為34個十進制數字的數字載體,最大值近似106145
  • date(整數,自UNIX時間的毫秒數)
  • byte array(二進制數組)
  • 布林truefalse
  • null
  • BSON對象
  • BSON數組
  • JavaScript代碼
  • MD5二進制數據
  • 正則表達式Perl兼容的正則表達式,即PCRE英語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',对象结尾)

參見

參考文獻

  1. ^ MIME Media Types - The Internet Assigned Numbers Authority. [2018-03-18]. (原始內容存檔於2012-12-21). 
  2. ^ 2.0 2.1 BSON Specification. [2018-03-18]. (原始內容存檔於2011-09-28). 
  3. ^ BSON (Binary JSON): Specification. [2018-01-17]. (原始內容存檔於2018-01-17). 
  4. ^ Introducing NoSQL and MongoDB | What Is NoSQL? | InformIT. [2018-01-17]. (原始內容存檔於2018-01-17). 
  5. ^ regex – Tools for representing MongoDB regular expressions — PyMongo 3.6.0 documentation. [2018-01-17]. (原始內容存檔於2018-01-18). 
  6. ^ JSON Specification. [2018-03-18]. (原始內容存檔於2011-02-23). 

外部連結