BSON和JSON的区别

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码刷题】排序算法总结(python实现)

排序算法总结(Python实现)算法介绍算法分类相关概念1. 冒泡排序(Bubble Sort)1.1 思想1.2 python实现1.3 复杂度1.4 稳定性2. 快速排序(Quick Sort)2.1 思想(伪代码)2.2 python实现2…

C语言遍历目录

C语言遍历目录&#xff0c;可以循环的遍历子目录#include <stdio.h>#include <string.h>#include <stdlib.h>#include <dirent.h>#include <sys/stat.h>#include <unistd.h>#include <sys/types.h>void listDir(char *path){struct …

学成在线--11.RabbitMQ快速入门

文章目录一.RabbitMQ简介二.相关知识1.AMQP2.JMS是什么 &#xff1f;三.RabbitMQ的工作原理四.Hello World1.创建Maven工程2.生产者3.消费者五.总结一.RabbitMQ简介 MQ全称为Message Queue&#xff0c;即消息队列&#xff0c; RabbitMQ是由erlang语言开发&#xff0c;基于AMQP…

数据库断言

SQL中&#xff0c;可以使用 CREATE ASSERTION语句&#xff0c;通过声明性断言来指定更具一般性的约束。 可以定义涉及多个表的或聚集操作的比较复杂的完整性约束。 断言创建以后&#xff0c;任何对断言中所涉及的关系的操作都会触发关系数据库管理系统对断言的检查&#xff0c;…

mysql帐号不允许从远程登陆

默认情况下&#xff0c;mysql帐号不允许从远程登陆&#xff0c;只能在localhost登录。本文提供了二种方法设置mysql可以通过远程主机进行连接。 一、改表法 在localhost登入mysql后&#xff0c;更改 “mysql” 数据库里的 “user” 表里的 “host” 项&#xff0c;将”localhos…

maven工程建立和SSM(springMVC+spring+mybatis)整合

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.环境&#xff1a; maven 版本&#xff1a;3.5.1 ecelipse mars.2 JDK : jdk1.8.0_45 tomcat : apache-tomcat-8.0.0-RC1 2. 建…

Java——网络编程(实现基于命令行的多人聊天室)

2019独角兽企业重金招聘Python工程师标准>>> 目录&#xff1a; 1.ISO和TCP/IP分层模型 2.IP协议 3.TCP/UDP协议 4.基于TCP的网络编程 5.基于UDP的网络编程 6.基于TCP的多线程的聊天室的实现 1.ISO和TCP/IP分层模型&#xff1a; OSI分层模型&#xff08;Open System …

学成在线--12.Spring整合RibbitMQ

文章目录一.搭建SpringBoot环境二.配置1.配置application.yml2.定义RabbitConfig类三.生产端四.消费端一.搭建SpringBoot环境 我们选择基于Spring-Rabbit去操作RabbitMQ 使用spring-boot-starter-amqp会自动添加spring-rabbit依赖&#xff0c;如下&#xff1a; <dependenc…

一网打尽中文编码转换---6种编码30个方向的转换

一网打尽中文编码转换——6种编码30个方向的转换 1.问题提出 在学编程序时&#xff0c;曾经有人问过“你可以编一个记事本程序吗?”当时很不屑一顾&#xff0c;但是随着学习MFC的深入&#xff0c;了解到记事本程序也并非易事&#xff0c;难点就是四种编码之间的转换。 对于编…

安装Ubunutu音频视频库

sudo apt-get install ubuntu-restricted-extras转载于:https://www.cnblogs.com/or2-/p/9216235.html

十万服务器秒级管控 腾讯云如何将AIOps用于日常管理?

AIOps&#xff0c;是指基于算法的 IT运维&#xff08;Algorithmic IT Operations&#xff09;&#xff0c;由 Gartner定义的新类别&#xff0c;源自业界之前所说的 ITOA&#xff08;IT Operations and Analytics&#xff09;。我们已经到达了这样的一个时代&#xff0c;数据科学…

ssm(springMVC + spring+MyBatis) 小例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 整体环境参见本人另一文&#xff1a;http://blog.csdn.net/jiangyu1013/article/details/51983360 此工程访问入口为index.jsp页面. 工…

多值依赖

在关系模式中&#xff0c;函数依赖不能表示属性值之间的一对多联系&#xff0c;这些属性之间有些虽然没有直接关系&#xff0c;但存在间接的关系&#xff0c;把没有直接联系、但有间接的联系称为多值依赖的数据依赖。例如&#xff0c;教师和学生之间没有直接联系&#xff0c;但…

js控制语句练习(回顾)

1、一个小球从100米空中落下&#xff0c;每次反弹一半高度&#xff0c;小球总共经过多少米&#xff0c;请问第10次反弹的高度是多少&#xff1f; //定义初始下落过程高度 var sum1 0; //定义初始上升高度 var sum2 0; //高度变化 var hight 100; for(var i0;i<10;i){ // …

学成在线--13.RabbitMQ工作模式

文章目录一.Work queues二.Publish/subscribe1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思考三.Routing1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思考四.Topics1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思…

《C++字符串完全指南——第一部分:win32 字符编码》

《C字符串完全指南--第一部分:win32 字符编码》 原作者:Michael Dun 译 者:Dingqiao Wang 引言 毫无疑问&#xff0c;你肯定见过像TCHAR, std::string, BSTR等等这类字符串类型.也包括一些以_tcs开头的奇怪的宏。也许你正盯着屏幕"哇哇"的发愁&#xff0c;然…

Spring、Spring MVC、MyBatis整合文件配置详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 web.xml的配置 web.xml应该是整个项目最重要的配置文件了&#xff0c;不过servlet3.0中已经支持注解配置方式了。在servlet3.0以前每…

19.C++-(=)赋值操作符、初步编写智能指针

()赋值操作符 编译器为每个类默认重载了()赋值操作符默认的()赋值操作符仅完成浅拷贝默认的赋值操作符和默认的拷贝构造函数有相同的存在意义()赋值操作符注意事项 首先要判断两个操作数是否相等 返回值一定是 return *this; 返回类型是Type&型,避免连续使用后,出现bug 比如…

windows mysqldump 不成功 1049 1064 报错

1064 路径不对&#xff0c;需要cd选到mysql bin目录下 1049 在cmd里面不需要分号 以下是正确的 E:\phpStudy\PHPTutorial\MySQL\bin>mysqldump -uroot -proot db >db.sql 转载于:https://www.cnblogs.com/JANCHAN/p/9227388.html

学成在线--14.使用RabbitMQ完成页面发布

文章目录一.技术方案二.页面发布——消费方1.需求分析2.创建Cms Client工程1&#xff09;创建maven工程2&#xff09;配置文件3&#xff09;启动类3.RabbitmqConfig配置类4.定义消息格式5.PageDao1&#xff09;使用CmsPageRepository 查询页面信息2&#xff09;使用CmsSiteRepo…