<< ..

Hello,BSON

发布时间:

BSON 是MongoDB存储文档的数据结构,在网络传输过程中也是利用bson交互。是一种类JSON的文档描述格式,简称Binary JSON。

BSON有四种数据基础类型:

byte	1 byte (8-bits)
int32	4 bytes (32-bit signed integer, two's complement)
int64	8 bytes (64-bit signed integer, two's complement)
double	8 bytes (64-bit IEEE 754-2008 binary floating point)

在处理document过程中,会按照BSON结构处理doc为以下结构形式,具体细节参看这里:


[4]byte(length) + byte(element.type) + []byte(element.key) + byte(0) + []byte(element.value) + byte(0)

//example
data = {"a":{"a":1}}
Println(bson.Marshal(data)) // out  [20 0 0 0 3 97 0 12 0 0 0 16 97 0 1 0 0 0 0 0]

在处理MongoDB数据过程中,对于较小的数据量级,可以考虑直接读取mongodump产生的BSON文件。

python-bson-streaming可以直接读取BSON RAW。

使用办法:

from bsonstream import KeyValueBSONInput
from sys import argv
import gzip

for file in argv[1:]:
    f=None
    if "gz" not in file:
        f = open(file, 'rb')
    else:
        f=gzip.open(file,'rb')
    stream = KeyValueBSONInput(fh=f,  fast_string_prematch="github")
for dict_data in stream:
    ...process dict_data...

另外有一种便捷快速的方案,参考:

https://stackoverflow.com/questions/27527982/read-bson-file-in-python