引进和使用在MongoDBBSON

一、什么是BSON

BSON是一个二进制的JSON格式存储的形式,或二进制JSON。它支持JSON文档对象和数组的对象以及JSON,但是BSON有一些数据类型的JSON没有,如日期和bindata类型。

BSON可以做为数据交换网络的存储形式,这有点类似于眉目传情协议缓冲,但是BSON存储在更少的架构,它具有灵活性高的优点,但它的缺点是空间利用率不是很理想,BSON有三个特点:重量轻,可以遍历和高效,

{你好世界}这是BSON例,其中你好是关键的名字,这是CString类型,字符串::字节=(字节*)/设备,其中*表示零个或多个字节的字节, /设备在回最后说;世界是价值的价值,它的类型是字符串,双阵列,二进制数据等。



二、在MonDB使用BSON

mondb使用BSON结构来存储数据和网络数据交换。这种格式转化为一个文件(文件)的概念,因为BSON是无模式,因此在相应的文件mondb也有这个功能,这里的文档也可以理解为关系数据库中的记录(记录),只是改变的文件更丰富一些,如文档可以嵌套。

MonDB使用BSON作为存储结构的一个重要原因是它的遍历性。



三、几种BSON

3.1文档的BSON说:

复制代码代码如下所示:

{

标题:mondb

last_editor:192.168.1.122

last_modified:新数据(27 / 06 / 2011 ),

身体:mondb

伙伴关系:{ 数据库

综述:假

}



这是一个简单的BSON结构,其中每个元素是由键/值对。

3.2嵌套示例

复制代码代码如下所示:

{

名称:勒墨

年龄:12

地址:{

城市:苏州

国家:中国

代码:215000

}

成绩:{

{name:英语

{名称:中文

}

}



这是一个比较复杂的例子,包括地址对象和分数数组对象,这里使用嵌套的文档对象和文档对象数据来表示个别的学生信息,文档的嵌入结构使用关系数据库做起来比较复杂。



4。BSON C++代码分析

的mondb树源代码包括BSON的代码库,你只包括BSON。h头文件,有四个班,更重要的是:

复制代码代码如下所示:

*妈妈::BSONObj,这是BSON对象的表示

*旁白::bsonelement,这在BSON对象元素的表示

*妈妈::BSONObjBuilder,这是类建立BSON对象

*旁白::bsonobjiterator,这是一个用来遍历对象的每一个元素的迭代器的BSON



以下是创建一个BSON对象

复制代码代码如下所示:

BSONObjBuilder B;

b.append(名

b.append(年龄

bsonobj P = b.obj();



也许

复制代码代码如下所示:

bsonobj P = bsonobjbuilder()。追加(名



或流动。

复制代码代码如下所示:

BSONObjBuilder B;

B名称勒墨<< << << << << << << << << << << << << << << <<柠檬>>,<< 23;

bsonobj P = b.obj();



或者用宏创建一个对象

复制代码代码如下所示:

bsonobj P = BSON(名乔<< << << << << < 33 >;



下面是对这四类代码的分析:

旁白::BSONObj主要是用来存储BSON对象和特定的存储格式如下

复制代码代码如下所示:

{ } *生态

---------------------------------------------------------

规模:总字节长度,包含本身

BSONType:对象类型,哪里有布尔,字符串,日期类型,等等,你可以参考的bsontypes H文件。

字段名:这里是表示字段名

数据:是在这里把具体的数据,并将数据存储方式是基于不同的bsontype

*表示可以有许多元素。

生态:这是一个终结者,这是一般/设备代表



一般来说,bsonobj的创作是由BSONObjBuilder完成的,除非你有它的字节流,可以产生直接bsonobj。



旁白::bsonelement,它主要是用来存储单元的对象,和存储格式如下

复制代码代码如下所示:





这个对象主要是指在bsonobj对象的特定元素的地址,这实际上并不存储该元素的值。

旁白:BSONObjBuilder:它主要是用来产生bsonobj对象,综合数据,它主要是用来存储实际字节,用来取代标准:stringstream,和StringBuilder与BufBuilder,这是一个动态增长内存缓冲区,但最大容量不能超过64MB的大小,是一个最大的bsonobj不能超过64mb。



旁白::bsonobjiterator,它主要用于在bsonobj对象遍历每一个元素,并提供了一些接口类似于STL迭代器。它还提供了一个foreach宏提供更方便的操作,如

复制代码代码如下所示:

如果({){

bsonforeach(E,obj)

DoSomething(E);

}