zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

mongodb:bson和json的区别

2023-09-27 14:27:10 时间

BSON(/ˈbiːsən/)是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式。它是一种二进制表示形式,能用来表示简单数据结构、关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。BSON之名缘于JSON,含义为Binary JSON(二进制JSON)。

BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是mongodb的数据存储格式。

类型

键名为字符串,键值有以下种类:

  • string
  • integer(32或64位)
  • double(64位IEEE 754浮点数)
  • decimal128(128位IEEE 754-2008浮点数;Binary Integer Decimal变体),适合作为任意精度为34个十进制数字的数字载体,最大值近似10
  • date(整数,自UNIX时间的毫秒数)
  • byte array(二进制数组)
  • 布尔(true或false)
  • null
  • BSON对象
  • BSON数组
  • JavaScript代码
  • MD5二进制数据
  • 正则表达式(Perl兼容的正则表达式,即PCRE,版本8.41,含UTF-8支持;与Python不完全兼容)

BSON的类型名义上是JSON类型的一个超集(JSON没有date或字节数组类型),但一个例外是没有像JSON那样的通用“数字”(number)类型。

举例

{
    title:"MongoDB",
    last_editor:"192.168.1.122",
    last_modified:new Date("27/06/2011"),
    body:"MongoDB introduction",
    categories:["Database","NoSQL","BSON"],
    revieved:false
}
{
    name:"lemo",
    age:"12",
    address:{
        city:"suzhou",
        country:"china",
        code:215000
    } ,
    scores:[
        {"name":"english","grade:3.0},
        {"name":"chinese","grade:2.0}
    ]
}

优点

  1. 更快的遍历速度
    对JSON格式来说,太大的JSON结构会导致数据遍历非常慢。在JSON中,要跳过一个文档进行数据读取,需要对此文档进行扫描才行,需要进行麻烦的数据结构匹配,比如括号的匹配,而BSON对JSON的一大改进就是,它会将JSON的每一个元素的长度存在元素的头部,这样你只需要读取到元素长度就能直接seek到指定的点上进行读取了。
  2. 操作更简易
    对JSON来说,数据存储是无类型的,比如你要修改基本一个值,从9到10,由于从一个字符变成了两个,所以可能其后面的所有内容都需要往后移一位才可以。而使用BSON,你可以指定这个列为数字列,那么无论数字从9长到10还是100,我们都只是在存储数字的那一位上进行修改,不会导致数据总长变大。当然,在MongoDB中,如果数字从整形增大到长整型,还是会导致数据总长变大的。
  3. 增加了额外的数据类型
    JSON是一个很方便的数据交换格式,但是其类型比较有限。BSON在其基础上增加了“byte array”数据类型。这使得二进制的存储不再需要先base64转换后再存成JSON。大大减少了计算开销和数据大小。
    但是,在有的时候,BSON相对JSON来说也并没有空间上的优势,比如对{“field”:7},在JSON的存储上7只使用了一个字节,而如果用BSON,那就是至少4个字节(32位)