引进和使用在MongoDBBSON
一、什么是BSONBSON是一个二进制的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);
}