按照惯例,我在这里先介绍一下什么是BSon。 BSon是Binary JSON的简称,是一种类Json的一种二进制形式的存储格式。目前Bson主要被MongoDB(目前一个较为流行的非关系数据模型的开源数据库)使用于存储数据和网络数据交换。 下面我们进入正题,介绍一下BSon是
按照惯例,我在这里先介绍一下什么是bson。
BSon是Binary JSON的简称,是一种类Json的一种二进制形式的存储格式。目前Bson主要被MongoDB(目前一个较为流行的非关系数据模型的开源数据库)使用于存储数据和网络数据交换。
下面我们进入正题,介绍一下BSon是怎么把一个个MongoDB的文档转换成二进制形式进行存储的,在此之前读者需要从BSon官网上大致了解一下其解释的规则,链接会在下面的参考资料中给出。
至于介绍的形式,当然是给出例子,为大家讲解每个转换的步骤。
在介绍转换步骤之前,读者需要了解BSon中有四种基本类型
下面给出例子
例1:
1 { 2 “Name”: “DataResearchLab”, 3 “IsGreat”:true, }
先来说明一下这个例子,这个就是非关系型数据库中存放数据的形式,在BSon上的解释就是相当于一个Document。如果要用关系型数据库进行解释的话,这个就相当于一个记录,但是这个记录有自己的列名。继续解释上面的记录,最外面的”{}”相当于变成语言中”{}” 的作用,即表示一个范围,也就是说这里面的数据是作为一个整体需要进行存储的。里面的”:”左面可以理解为是键值,即一个数据库中只有唯一的一个键值。顺便提一下,在BSon所有的键值都被视为cstring 类型(BSong存储的基本类型中的一种)。”:”的右面是左面键值对应的值,这个值可以有很多形式,如布尔型,字符串,32位整型,浮点型,甚至是数组,JavaScript的代码,正则表达式或是在嵌套一个Document等等,香港服务器,具体有什么读者可以查看BSon官网的介绍。
再返回来看这个例子,照之前的解释,相当于用户想要在数据库中存储一个数据,这个数据包括三个数据项。其中键值”Name”对应存储的数据是字符串型的”DataResearchLab “,键值”IsGreat”对应存储的数据是布尔型数据true,香港虚拟主机,键值”Feilds”对应存储的是一个数组型的数据”[“CloudComputing”,”NoSQL”,”BigData”]”。
接下来进入正题,看看运用BSon是怎么把该数据转换成二进制形式在非关系数据库中存储的。数据被作为一个Document跟据BSon的规则(具体规则这里不给出,请查看BSon官网的规则说明)需要进一步进行分解为三项int32,e_list, “x00″。
先来介绍一下int32。int32需要占用四个字节,但是这个有两点需要特别注意。第一点就是,Document解释成的int32是用来计算该Document的长度的,但这个长度包含本身自己int32四个字节的长度。以本例来算,总共的Document需要102个字节,这102个字节包括本身int32所占的四个字节和后面所解释出的所有的所需的字节长度,当然102个字节在一开始是没法算出来的,只有将该Document都解释完才会算出这个数据。第二点要说明的是,存储长度本身占有四个字节,而这四个字节需要高位存储。至于什么是高位存储,这里只给一个简单的解释,就是四个字节中的最低位字节对应到存储器的最高位,最高为的字节对应到存储器的最低位。本例中需要102个字节,对应到十六进制是”x66x00x00x00″,而不是”x00x00x00x66″(这种存储形式是低位存储)。
接下来说一下”x00″。这个对应过来的十六进制相当于是一个结束符,有点类似于程序设计语言中字符串类型最后的”