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). 

外部链接

编辑

📚 Artikel Terkait di Wikipedia

二进制

二進制(英語:binary)在數學和數位電路中指以2為底数的記數系統,以2為基數代表系統是二進位制的。這一系統中,通常用兩個不同的數字0和1來表示。數字電子電路中,邏輯門直接採用了二進制,因此現代的計算機和依赖計算機的設備裡都用到二進制。每個數字稱為一個位元(二進制位)或比特(Bit,Binary digit

可变长数组

S9(4) BINARY. 05 DEPT-PERSON OCCURS 0 TO 20 TIMES DEPENDING ON PEOPLE-CNT. 10 PERSON-NAME PIC X(20). 10 PERSON-WAGE PIC S9(7)V99 PACKED-DECIMAL. C#函数:

PL-SQL

BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。 其它数值类型: dec, decimal, double precision, int, numeric, real, smallint, binary_integer. 字符串数据类型依据存储空间分为两种: 固定长度类型:CHAR/NCHAR,自动补足空格,最多可以存储2

高精度计算

pascal: var a,b,c:array[1..201] of integer; n:string; lena,lenb,lenc,i,x:integer; begin readln(n); lena:=length(n); for i:=1 to lena

Python

zero); …… The integer division and modulo operators are connected by the following identity: x == (x/y)*y + (x%y).  PEP 327 – Decimal Data Type. [2015-09-26]

Java数据库连接

BigDecimal DECIMAL java.math.BigDecimal BIT boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[]

JAXB

lang.String xsd:positiveInteger java.math.BigInteger xsd:int int xsd:long long xsd:short short xsd:decimal java.math.BigDecimal xsd:float float xsd:double

圓周率

Sequence A004601 (Expansion of Pi in base 2 (or, binary expansion of Pi)). The On-Line Encyclopedia of Integer Sequences. OEIS Foundation.  Arndt & Haenel