BSON结构
BSON结构
flyfish 2015-7-24
主要解释bsonspec.org站点上的两个样例
{"hello": "world"}
hello为key。world为value 相应的是
\x16\x00\x00\x00
\x02
hello\x00
\x06\x00\x00\x00world\x00
\x00
解释每一行的意思
\x16\x00\x00\x00
\x表示16进制的方式
4个字节表示文档的大小,包含文档末尾的'\0','\0'是\x00 0x16十进制是22,这个文档的大小是22个字节
採用小端(Little Endian) 原文:Each type must be serialized in little-endian format.
每一种类型必须依照little-endian格式序列化。
\x02
一个字节表示value的类型,通过查看bsonspec 文档
原文:"\x02" e_name string UTF-8
\x02 表示value的类型是string。字符串编码使用的是UTF-8
hello\x00
表示以'\0'结尾的字符串
\x06\x00\x00\x00world\x00
\\x06\x00\x00\x00 前4个字节表示以'\0'结尾的字符串world的长度
\x00
结束符
二
{"BSON": ["awesome", 5.05, 1986]}
原文:the array ['red', 'blue'] would be encoded as the document {'0': 'red', '1': 'blue'}. The keys must be in ascending numerical order.
数组['red', 'blue']将要编码为{'0': 'red', '1': 'blue'}。key必须依照数值大小递增排序(升序)。
也就是["awesome", 5.05, 1986]将被编码为{ "0":"awesome", "1":5.05,"2":1986}
{"BSON": [ "0":"awesome", "1":5.05,"2":1986]}
相应是
\x31\x00\x00\x00
\x04BSON\x00
\x26\x00\x00\x00
\x02\x30\x00\x08\x00\x00\x00awesome\x00
\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
\x10\x32\x00\xc2\x07\x00\x00
\x00
\x00
解释每一行的意思
\x31\x00\x00\x00
4个字节表示文档的大小。x31的10进制是49,这个文档的大小是49个字节
\x04BSON\x00
原文:"\x04" e_name document Array
\x04表示value的类型是数组表示的document
BSON\x00 表示以'\0'结尾的字符串
\x26\x00\x00\x00
4个字节表示数组的大小即中括号的内容,x26的10进制是38
\x02\x30\x00\x08\x00\x00\x00awesome\x00
\x02 表示value的类型是string
x30表示key,字符0的ASCII码是48,16进制是x30
纵向看正好是x30。x31,x32
\x08\x00\x00\x00 4个字节表示awesome\x00 长度
\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
\x01
原文\x01" e_name double 64-bit binary floating point
表示64位的二进制浮点数
x31\x00表示以'\0'结尾的字符串1,字符1的ASCII码是x31
x33\x33\x33\x33\x33\x33\x14\x40
double的5.5转换成16进制为40 14 33 33 33 33 33 33
\x10\x32\x00\xc2\x07\x00\x00
原文:"\x10" e_name int32 32-bit integer
\x10表示32位的整数
\x32\x00表示以'\0'结尾的字符串2,字符2的ASCII码是x32
\xc2\x07\x00\x00
也就是16进制的7c2转换成10进制是1986
\x00
\x00
结束符
BSON结构的更多相关文章
- MongoDB之bson的介绍
MongoDB之bson的介绍 1. 什么是bson BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JS ...
- MongoDB之一介绍(MongoDB与MySQL的区别、BSON与JSON的区别)
MySQL与MongoDB的操作对比,以及区别 MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL ...
- BSON入门
1.概念BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组 ...
- MongoDB笔记
mongodb简介 MongoDB 是一个基于分布式文件存储的数据库.存储的是Bson结构的文档(二进制的JSON),内部执行引擎为JS解释器,把文档存储为BSON结构,在查询时,转换为JS对象,可以 ...
- Worktile 技术架构概要
其实早就该写这篇博客了,一直说忙于工作没有时间,其实时间挤挤总会有的,可能就是因为懒吧!从2013年11月一直拖到现在,今天就简单谈谈 Worktile 的技术架构吧 . Worktile 自上线到现 ...
- MongoDB的导入导出(7)
导入/导出可以操作的是本地的mongodb服务器,也可以是远程的. 所以,都有如下通用选项: -h host 主机 --port port 端口 -u username 用户名 -p pas ...
- MongoDB的ObjectId和基本操作增删改查(3)
ObjectId 基本操作增删改查 增: insert 介绍: mongodb存储的是文档,. 文档是json格式的对象. 语法: db.collectionName.insert(document) ...
- worktile的架构设计
Worktile自上线两年多以来,以良好的用户体验和稳定的服务,获得了用户的认可和喜爱.截止笔者写这篇文章的时候,已经有超过10万家团队在使用Worktile.作为团队协作工具,从技术上分析首先要解决 ...
- 高级php面试题(转)
一.mysql相关知识 1. mysql优化方式 MYSQL 优化常用方法 mysql 性能优化方案 2.如何分库分表 ...
随机推荐
- thinkphp5 404 file_put_contents 无法打开流:权限被拒绝
如果你用TP的时间比较长,或者说你比较了解TP的人都会知道,TP的runtime它需要的权限是很大的,如果你只给一般权限肯定是不行的,通常都是给runtime权限:777: linux命令如下: cd ...
- boostrapvalidator
一个例子 <%@ page contentType="text/html;charset=UTF-8" language="java" %> < ...
- cp - 复制文件和目录
总览 cp [选项] 文件路径 cp [选项] 文件...目录 POSIX 选项: [-fipRr] GNU 参数(最短形式): [-abdfilprsuvxPR] [-S SUFFIX] [-V { ...
- mysql.connector.errors.IntegrityError: 1048 (23000): Column 'request_url' cannot be null
箭头指向的2的方向 少了一个request_url的值 调试: 直接 执行sql语句 是没问题的, 这样就知道问题是出在代码的逻辑 处理了: INSERT INTO response_time (nu ...
- JAVA编程不得不看的几本经典书籍
为了帮助对java编程感兴趣的同学更好.更快的提高编程技术,武汉北大青鸟光谷校区专业老师在此推荐几本学习编程非常有用的书籍,以供大家参考. 入门类 1.<java从入门到精通>(第3版) ...
- CAD参数绘制mcdbsolid对象(com接口)
C#中实现代码说明: private void DrawSolid() { //绘McDbSolid对象 axMxDrawX1.AddLinetype("MLineType1", ...
- java引用数据类型在方法中的值传递
package org.jimmy.autosearch20180821.test; public class TestStringArr { public static void main(Stri ...
- Sublime Text3 学习笔记
注:以下记录自己的 Sublime Text3学习过程(持续更新中) 目录: 安装 下载文件 破解试用 插件安装 安装 Sublime Text 是一套跨平台的文本编辑器,支持基于Python的插件. ...
- php 日常问题
1.isset.empty.is_null的区别 isset 判断变量是否定义或者是否为空 变量存在返回ture,否则返回false 变量定义不赋值返回false unset一个变量,返回false ...
- python多线程和多进程(一)
一.多线程 Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装.绝大多数情况下,只需要使用thr ...