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.pswp.cn/news/452234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452234.shtml
英文地址,請注明出處:http://en.pswp.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…