通过前面的介绍可以了解到,MongoDB存储的数据格式与JSON十分类似,MongoDB所采用的数据格式被称为BSON,是一种基于JSON的二进制序列化格式,用于MongoDB存储文档并进行远程过程调用。
JSON是一种网络常用的数据格式,具有自描述性。JSON的数据表示方式易于解析,但支持的数据类型有限。BSON目前主要用于MongoDB中,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。BSON改进的主要特性有下面三点。
BSON对JSON的一个主要的改进是,在BSON元素的头部有一个区域用来存储元素的长度,当遍历时,如果想跳过某个文档进行读取,就可以先读取存储在BSON元素头部的元素的长度,直接寻找到指定的点上就完成了文档的跳过。在JSON中,要跳过一个文档进行数据读取,需要在对此文档进行扫描的同时匹配数据结构才可以完成跳过操作。
如果要修改JSON中的一个值,如将9修改为10,这实际是将一个字符变成了两个,会导致其后面的所有内容都向后移一位。在BSON中,可以指定这个列为整型,那么,当将9修正为10时,只是在整型范围内将数字进行修改,数据总长不会变化。需要注意的是:如果数字从整型增大到长整型,还是会导致数据总长增加。
BSON在JSON的基础上增加了很多额外的类型,BSON增加了“byte array”数据类型。这使得二进制的存储不再需要先进行base64转换再存为JSON,减少了计算开销。
BSON支持的数据类型见表2.2。
表2.2 BSON支持的数据类型