当前位置: 首页 > news >正文

BSON与JSON的区别

为什么80%的码农都做不了架构师?>>>   hot3.png

BSON是由10gen开发的一个数据格式,目前主要用于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。大大减少了计算开销和数据大小。

当然,在有的时候,BSON相对JSON来说也并没有空间上的优势,比如对{“field”:7},在JSON的存储上7只使用了一个字节,而如果用BSON,那就是至少4个字节(32位)

目前在10gen的努力下,BSON已经有了针对多种语言的编码解码包。并且都是Apache 2 license下开源的。并且还在随着MongoDB进一步地发展。关于BSON,

转载于:https://my.oschina.net/web5/blog/288255

相关文章:

  • 【译】分页技术简介
  • Docker学习笔记_安装和使用Redis
  • 【转载】android软键盘的一些控制
  • 用element的upload组件实现多图片上传和压缩
  • oracle表空间查询
  • linux 防爆破方法
  • [转载]看我花式绕过校园网计费认证
  • 前嗅ForeSpider采集配置界面介绍
  • Weblogic发布小问题——weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND
  • POI生成Excel
  • 关于Yii中CGridView关联表字段的filter问题解决方法
  • 78. Subsets
  • 如何识别一个字符串是否Json格式
  • 全能App研发助手!滴滴开源DoraemonKit
  • 码农张的Bug人生 - 初来乍到
  • [LeetCode] Wiggle Sort
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【面试系列】之二:关于js原型
  • download使用浅析
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Javascript 原型链
  • Map集合、散列表、红黑树介绍
  • MySQL的数据类型
  • node学习系列之简单文件上传
  • Object.assign方法不能实现深复制
  • session共享问题解决方案
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • vue-router 实现分析
  • zookeeper系列(七)实战分布式命名服务
  • 订阅Forge Viewer所有的事件
  • 力扣(LeetCode)56
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 在Docker Swarm上部署Apache Storm:第1部分
  • elasticsearch-head插件安装
  • Java总结 - String - 这篇请使劲喷我
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (译)2019年前端性能优化清单 — 下篇
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (轉)JSON.stringify 语法实例讲解
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net 垃圾回收机制原理(二)
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET开发者必备的11款免费工具
  • @staticmethod和@classmethod的作用与区别
  • @vue/cli 3.x+引入jQuery
  • [.NET]桃源网络硬盘 v7.4
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [AIGC] Java 和 Kotlin 的区别
  • [Android]How to use FFmpeg to decode Android f...
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据