日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Bson类似于Protocol Buffer的数据形式,比json更轻量级更高效

發布時間:2024/3/24 编程问答 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Bson类似于Protocol Buffer的数据形式,比json更轻量级更高效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Bson介紹

BSON是Binary JSON的縮寫,是一種類json的一種二進制形式的存儲格式。
它和JSON一樣,支持內嵌的文檔對象和數組對象,但是BSON在JSON基礎上進行了一些數據類型的擴展,如Date和BinData類型。

BSON是二進制形式的存儲格式,類似于Google的Protocol Buffer。
但是BSON是“schema-less”的存儲形式,這使得它在靈活性方面具有優勢,但在空間效率方面也有一點劣勢(對于序列化數據中包含的字段名,BSON有開銷)。


二、特點:

BSON有三個特點:輕量級、可遍歷性、高效性。

輕量級

對于任何一種數據表示格式(尤其是在網絡上使用時)來說,將存儲空間保持在最小值是非常重要的。

可遍歷性

BSON被設計成易于操作。這是作為MongoDB的主要數據代表的重要支持。

高效性

由于使用了C數據類型,在大多數語言中,對BSON進行編碼和對BSON進行解碼都可以非常快速地完成。


三、Bson的數據類型

BSON支持的類型:

有一個枚舉BsonType(Bson 3.0新增的枚舉),里面就是Bson的所支持的數據類型。

還有一個類BSON,也包含了各種類型。

類型序號別名備注
Double1"double"
String2"string"
Object3"object"Document類型
Array4"array"
Binary data5"binData"
Undefined6"undefined"Deprecated
ObjectId7"objectId"
Boolean8"bool"
Date9"date"DATE_TIME類型
Null10"null"
Regular Expression11"regex"
DBPoint12"dbPointer"Deprecated
JavaScript13"javaScript"
Symbol14"symbol"Deprecated
JavaScript(with scope)15"javaScriptWithScope"
32-bit integer16"int"
Timestamp17"timestamp"
64-bit integer18"long"
Decimal12819"decimal"New version in 3.4.
Min Key-1"minKey"
Max Key127"maxKey"

四、Bson的格式

主要解釋bsonspec.org網站上的兩個例子

一、對象

{"hello": "world"}

hello為key,world為value 對應的是

\x16\x00\x00\x00 \x02hello\x00\x06\x00\x00\x00world\x00\x00

解釋每一行的意思:

\x16\x00\x00\x00:\x表示16進制的方式。4個字節表示文檔的大小,包括文檔末尾的'\0','\0'是\x00 0x16十進制是22,這個文檔的大小是22個字節
采用小端(Little Endian) 原文:Each type must be serialized in little-endian format.
每一種類型必須按照little-endian格式序列化。

\x02一個字節表示value的類型是string,字符串編碼使用的是UTF-8

hello\x00表示以'\0'結尾的字符串

\x06\x00\x00\x00world\x00:\\x06\x00\x00\x00 前4個字節表示以'\0'結尾的字符串world的長度

\x00 結束符

二、數組

{"BSON": ["awesome", 5.05, 1986]}

數組['red', 'blue']將要編碼為{'0': 'red', '1': 'blue'},key必須按照數值大小遞增排序(升序)。
也就是["awesome", 5.05, 1986]將被編碼為{ "0":"awesome", "1":5.05,"2":1986}
{"BSON": [ "0":"awesome", "1":5.05,"2":1986]}

對應是

\x31\x00\x00\x00\x04BSON\x00\x26\x00\x00\x00\x02\x30\x00\x08\x00\x00\x00awesome\x00\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40\x10\x32\x00\xc2\x07\x00\x00\x00\x00

解釋每一行的意思
\x31\x00\x00\x00:
4個字節表示文檔的大小,x31的10進制是49,這個文檔的大小是49個字節

\x04BSON\x00:
\x04表示value的類型是數組表示的document
BSON\x00 表示以'\0'結尾的字符串

\x26\x00\x00\x00 :
4個字節表示數組的大小即中括號的內容,x26的10進制是38

\x02\x30\x00\x08\x00\x00\x00awesome\x00:
\x02 表示value的類型是string
x30表示key,字符0的ASCII碼是48,16進制是x30
縱向看正好是x30,x31,x32
\x08\x00\x00\x00 4個字節表示awesome\x00 長度

\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40:

\x01
表示64位的二進制浮點數
x31\x00表示以'\0'結尾的字符串1,字符1的ASCII碼是x31
x33\x33\x33\x33\x33\x33\x14\x40
double的5.5轉換成16進制為40 14 33 33 33 33 33 33

\x10\x32\x00\xc2\x07\x00\x00:\x10表示32位的整數。\x32\x00表示以'\0'結尾的字符串2,字符2的ASCII碼是x32
\xc2\x07\x00\x00也就是16進制的7c2轉換成10進制是1986

最后兩行的\x00 \x00:結束符。

總結:看完了這個介紹,你有什么感覺?真香。寫起來太麻煩了,看到這個有點像莫斯密碼了,頭大了,還是Json寫起來簡單。
但是Bson在存儲上來說比json更輕量級。


五、Bson的一些API介紹

我這里只做了兩張圖,如下所示:

Bson接口圖解1 Bson接口圖解2

總結

以上是生活随笔為你收集整理的Bson类似于Protocol Buffer的数据形式,比json更轻量级更高效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。