BSON目前主要用于MongoDB中,是mongoDB的数据存储格式,BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。

  BSON主要实现下面三点:

  1、更快的遍历速度

   对json格式来说,太大的json结构会导致数据遍历非常慢。在json中,要跳过一个文档进行数据读取,需要对此文档进行扫描才行,需要进行麻烦的数据结构匹配,比如括号的匹配。 
  而bson对json的一大改进就是,它会将json的每一个元素的长度存在元素的头部,这样你只需要读取到元素长度就能直接seek到指定的点上进行读取了。

  2、操作更简易

   对json来说,数据存储是无类型的,比如你要修改基本一个值,从9到10,由于从一个字符变成了两个,所以可能其后面的所有内容都需要往后移一位才可以。 
  而使用bson,你可以指定这个列为数字列,那么无论数字从9长到10还是100,我们都只是在存储数字的那一位上进行修改,不会导致数据总长变大。 
  当然,在mongoDB中,如果数字从整形增大到长整型,还是会导致数据总长变大的。

  3、增加了额外的数据类型

   json是一个很方便的数据交换格式,但是其类型比较有限。 
  bson在其基础上增加了“byte array”数据类型。这使得二进制的存储不再需要先base64转换后再存成json,大大减少了计算开销和数据大小。

  

  综上所述

  数据结构上json是按字符串存储,bson是按结构存储。

  存储空间上 bson>json

  操作速度上 bson>json。比如,遍历查找:json需要扫字符串,而bson可以直接利用预先在字符串前面的字符串长度直接定位。

  修改上json要因为字符串长度的改变而大动大移,bson的话因为是按结构存储,因此还是占用同样的存储空间,不需要移动。

转载于:https://www.cnblogs.com/zsk-1996/p/8639237.html

BSON和JSON的区别相关推荐

  1. BSON及BSON和JSON的区别

    说明 新公司在用MongoDB,由于使用MongoDB时其中有一个很重要的类Document,翻看源码时发现他实现了BSON,本人之前对其不了解,故而有了这篇文章. 概念 参考百科说明:BSON( B ...

  2. BSON的介绍及BSON与JSON的区别

    一.概念 参考百科说明:BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称.对表示方法,支持内嵌的文档对象 ...

  3. 【MongoDB】BSON的介绍及BSON与JSON的区别

    说明 公司在用MongoDB,由于使用MongoDB时其中有一个很重要的类Document,翻看源码时发现他实现了BSON,本人之前对其不了解,故而有了这篇文章. 概念 参考百科说明:BSON( Bi ...

  4. BSON与JSON的区别

    BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式.BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schem ...

  5. mongodb:bson和json的区别

    BSON(/ˈbiːsən/)是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式.它是一种二进制表示形式,能用来表示简单数据结构.关联数组(MongoDB中称为&quo ...

  6. python request.post 字典参数以json_Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

  7. package.json和package-lock.json的区别

    发现我的node项目下面只有一个package-lock.json文件,不存在package.json文件,顺便扒一扒这两个的区别,其实package-lock就是锁定安装时的包版本号,需要上传到gi ...

  8. python post json参数,Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

  9. 【YAML】YAML语言|YAML配置文件|YAML库用法|相比json的区别优势

    目录 YAML简介 官方定义 我的理解 基本的语法结构 1. 当数据类型是字面量 2.当数据类型是对象.键值对的集合 3.当数据类型是数组.一组按次序排列的值 YAML库编译与使用 库的下载与编译安装 ...

最新文章

  1. Python3 的urllib实例
  2. 最后一周 | 微生物组-宏基因组分析第8期(报名直播课免费参加线下2020.7)
  3. python画图完整代码-Python科学画图代码分享
  4. 使用RxJava从多个数据源获取数据
  5. 快手 算法工程师 0825 笔试题
  6. 转载-C#委托之多播委托( 二)
  7. java socket 中文乱码_java-Socket接受中文乱码的解决 | 学步园
  8. Hive的三种建表方式
  9. JavaScript学习指南教程分享
  10. Pascal基础(四)-常用函数和标准库
  11. IE11设置默认以IE8的方式解析
  12. abb机器人焊接编程视频教程_【ABB】ABB机器人焊接指令介绍,内附视频
  13. 【Java 8 新特性】Java Comparator.nullsLast | 将空元素被认为大于非空元素
  14. 江苏小高考计算机难吗,江苏小高考成绩
  15. java集成kettle 8.2 获取转换的执行日志与步骤度量
  16. 7位白手起家的亿万富豪的7大独特做事准则 凤凰科技02-0411:46 原标题:7位白手起家的亿万富豪的7大独特做事准则 那些白手起家的亿万富翁企业家是否有一些独特的思维方式和做事准则,从而让自己获得
  17. 记录学习Android基础的心得07:硬件控制P2
  18. Vue上传图片裁剪预览插件vue-img-cutter的使用
  19. 教你一步一步用 Node.js 制作慕课网视频爬虫
  20. 网页怎么算切屏_十种切屏抓取方法(图形)

热门文章

  1. 低压差稳压器--AMS1117芯片简介 结构
  2. mysql 概念与命令总结(贼全)
  3. Android的APPT工具会优化PNG吗?
  4. StumbleuponAnalysis--逻辑回归二元分类
  5. vue3项目名称报错
  6. 应用 AddressSanitizer 发现程序内存错误
  7. c++:定义函数Product计算两个浮点数数的乘积(定义函数)
  8. macOS 使用教程(从 Windows 到mac)
  9. 机器人摘苹果,果农的的“世界末日”来临了吗?
  10. C语言 12个球称3次 找出其中一个坏球