BSON
BSON [bee·sahn]是Binaryary JSON的缩写,是类似于JSON数据结构的二进制编码的序列化文档。像JSON一样,BSON支持数组、对象的嵌套,BSON还扩展了JSON的数据类型,如:BSON具有日期类型和BinData类型。看一个例子:
{ name:"lemo", age:"12", last_modified:new Date("27/06/2011"), address:{ city:"suzhou", country:"china", code:215000 } , scores:[ {"name":"english","grade:3.0}, {"name":"chinese","grade:2.0} ] }
BSON和protobuf二者都是二进制,但BSON比pb更加灵活,因为它schema-less,但其缺点是体积比较大。
BSON的设计特点:
- 轻巧的:对于任何数据表示格式,尤其是在网络上使用时,将空间开销保持在最小限度是非常重要的。
- 更快的遍历速度:BSON被定义为易于遍历。对JSON格式来说,太大的JSON结构会导致数据遍历非常慢。在JSON中,要跳过一个文档进行数据读取,需要对此文档进行扫描才行,需要进行麻烦的数据结构匹配,比如括号的匹配,而BSON对JSON的一大改进就是,它会将JSON的每一个元素的长度存在元素的头部,这样你只需要读取到元素长度就能直接seek到指定的点上进行读取了。
- 高效的:由于使用C数据类型,因此在大多数语言中可以非常快速地执行将数据编码到BSON和从BSON解码的操作。
此外于json对比,BSON在其基础上增加了“byte array”数据类型。这使得二进制的存储不再需要先base64转换后再存成JSON。大大减少了计算开销和数据大小。
1. BSON的java实现
bson4jackson 库(https://github.com/michel-kraemer/bson4jackson )
2. BSON的javascript实现
js-bson 库( https://github.com/mongodb/js-bson )
3. BSON的python实现
pymongo 库