美文网首页程序员程序员
BSON 语法规范v1.0(BSON Specification

BSON 语法规范v1.0(BSON Specification

作者: 非典型程序员 | 来源:发表于2016-11-08 14:19 被阅读175次

    BSON 是一种类似 JSON 的二进制编码存储格式,它将0或多个键值(zero or more key/value pairs)对当做单独的实体(a single entity)进行二进制格式存储,我们把这个实体称作了文档(document)。BSON 的语法规范是采用伪 BNF 编写的,有效的 BSON 数据使用无终端符的文档编写的(We've written the grammar using a pseudo-BNF syntax. Valid BSON data is represented by the document non-terminal.)。

    原文链接

    基本类型(用作终端符)

    以下的基本类型,在语法中用于作为终端符号使用,而却每一种类型都只是使用小端序格式(Little-endian format:一种数据编码的方式,与之的对应的是Big-endian format)

    类型 描述
    byte 1个字节(8位)
    int32 4个字节(32位有符号整数,补码表示;32-bit signed integer, two's complement)
    int64 8个字节(64位有符号整数,补码表示;64-bit signed integer, two's complement)
    double 8个字节 (64位 IEEE 754-2008 二进制浮点数)
    decimal128 16 bytes (128位 IEEE 754-2008 十进制浮点数)
    非终端符

    以下指定BSON中的非终端字符语法。值得注意的是,使用引号扩起来的字符串使用的上述“终端符”描写的,而且应该遵循 C 语言规范理解(比如说: “\x01” 表示二进制字节 0000 0001)。此外同时也请注意我们使用操作符作为重复的速记法(如,("\x01"2)代表"\x01\x01"),当*作为一元操作符,意味着可以重复出现0次以上。

    document::=int32      e_list "\x00"       BSON 文档。 int32是文档的字节总数。
      e_list::=element    e_list            文档的顶级元素列表
             | ""
     element::= "\x01" e_name double     (表示该元素是64位的二进制浮点数)
             |  "\x02" e_name string     (表示该元素是UTF-8的字符串)
             |  "\x03" e_name document   (表示该元素是内嵌的Document)
             |  "\x04" e_name document   (表示该元素是内嵌的 Array Document)
             |  "\x05" e_name binary     (表示该元素是二进制数据) 
             |  "\x06" e_name            (Undefined (value) 已废弃)
             |  "\x07" e_name (byte*12)  (ObjectId 12个字节的ObjectID)
             |  "\x08" e_name "\x00"     (Boolean 表示Boolean变量 false)
             |  "\x08" e_name "\x01"     (Boolean 表示Boolean变量 true)
             |  "\x09" e_name int64      (UTC datetime)
             |  "\x0A" e_name            (空值:Null value)
             |  "\x0B" e_name cstring cstring (正则表达式)
             |  "\x0C" e_name string (byte*12) (DBPointer —*Deprecated*)
             |  "\x0D" e_name string     (JavaScript 代码)
             |  "\x0E" e_name string     (符号:Symbol.*已废弃)*
             |  "\x0F" e_name code_w_s   (JavaScript code w/ scope)
             |  "\x10" e_name int32      (32位有符号整型)
             |  "\x11" e_name int64      (时间戳)
             |  "\x12" e_name int64      (64位有符号整型)
             |  "\x13" e_name decimal128 (十进制浮点数)
             |  "\xFF" e_name            (Min key)
             |  "\x7F" e_name            (Max key)
      e_name::=cstring                   (建值名称)
      string::=int32 (byte*) "\x00"      (字符串,Int32是 总字节数  (byte*) + 1(结尾\x00)) 
     cstring::=(byte*) "\x00"            (C格式的字符串,UTF-8 encoded characters)
      binary::=int32 subtype (byte*)     (二进制, Int32是总字节数 (byte*))
     subtype::= "\x00"                   (Generic binary subtype)
             |  "\x01"                   (Function)
             |  "\x02"                   (Binary (Old))
             |  "\x03"                   (UUID (Old))
             |  "\x04"                   (UUID )
             |  "\x05"                   (MD5)
             |  "\x80"                   (User defined)
    code_w_s::=int32 string document     (Code w/ scope)
    
    注意
    1. Array - 数组文档是一个正常的BSON文档。keys是从0开始顺序编号的整数.例如,一个数组['red', 'blue']编码为document表示{'0': 'red', '1': 'blue'}。keys必须是升序的。
    2. UTC datetime - int64是以毫秒为单位的Unix时间.
      Timestamp - 使用 MongoDB 复制和分片的特别内部类型。前4字节是增量,后4字节时间戳.
    3. Min key - 与其他可能的 BSON 元素值进行小于比较的特殊类型。
    4. Max key - 与其他可能的 BSON 元素值进行大于比较的特殊类型。
    5. Generic binary subtype - 这是最常用的二进制子类型,应该是驱动程序和工具默认类型。
    6. BSON "binary"或"BinData"的数据类型用来表示的字节数组。 它是有些类似于Java的ByteArray的概念。BSON 二进制值有一种亚型。这用于指示在字节数组中存储的是什么样的数据。从0到127的子类型是预定义或保留的,从128-255 的子类型是用户定义的。
      • \x02 Binary(旧版本)- 这曾经是默认的子类型,已经被废弃,现在通常使用 \x00 。驱动程序和工具应务必妥善处理 \x02。二进制数据 (byte* 中的数组的二进制非终端符) 的结构必须是int32后紧接着(byte)。Int32是(byte)的重复的次数。
      • \x03 UUID(旧版本)** - 这曾经是 UUID 亚型,已经被废弃,现在通常使用 \x04 。驱动程序和工具的语言与本机的 UUID 类型应适当地处理 \x03。
      • \x80-\xFF是用户定义的子类型。二进制数据可以是任何数据。code_w_s带一个int32范围,表示代码以字节为单位的长度。该字符串是 JavaScript 代码。该文件是从标识符映射到值,表示应在其中计算字符串的范围。
    7. **Code w/ scope ** - The int32 is the length in bytes of the entire code_w_s value. The string is JavaScript code. The document is a mapping from identifiers to values, representing the scope in which the string should be evaluated.
    样例一
    Paste_Image.png
    样例二
    Paste_Image.png
    样例三
    Paste_Image.png

    相关文章

      网友评论

        本文标题:BSON 语法规范v1.0(BSON Specification

        本文链接:https://www.haomeiwen.com/subject/gnvauttx.html