1. 程式人生 > 實用技巧 >MongoDB教程6-BSON對JSON做了哪些改進

MongoDB教程6-BSON對JSON做了哪些改進

MongoDB儲存的資料格式與 JSON 十分類似,MongoDB 所採用的資料格式被稱為 BSON,是一種基於 JSON 的二進位制序列化格式,用於 MongoDB 儲存文件並進行遠端過程呼叫。

JSON 是一種網路常用的資料格式,具有自描述性。JSON 的資料表示方式易於解析,但支援的資料型別有限。BSON 目前主要用於 MongoDB 中,選擇 JSON 進行改造的原因主要是 JSON 的通用性及 JSON 的結構特性。

BSON 改進的主要特性有下面三點。

更快的遍歷速度

BSON 對 JSON 的一個主要的改進是,在 BSON 元素的頭部有一個區域用來儲存元素的長度, 當遍歷時,如果想跳過某個文件進行讀取,就可以先讀取儲存在 BSON 元素頭部的元素的長度, 直接尋找到指定的點上就完成了文件的跳過。

在 JSON 中,要跳過一個文件進行資料讀取,需要在對此文件進行掃描的同時匹配資料結構才可以完成跳過操作。

操作更簡易

如果要修改 JSON 中的一個值,如將 9 修改為 10,這實際是將一個字元變成了兩個,會導致其後面的所有內容都向後移一位。

在 BSON 中,可以指定這個列為整型,那麼,當將 9 修正為 10 時,只是在整型範圍內將數字進行修改,資料總長不會變化。

需要注意的是:如果數字從整型增大到長整型,還是會導致資料總長增加。

支援更多的資料型別

BSON 在 JSON 的基礎上增加了很多額外的型別,BSON 增加了“byte array”資料型別。這使得二進位制的儲存不再需要先進行 base64 轉換再存為 JSON,減少了計算開銷。

BSON 支援的資料型別如表所示。

資料型別描述
String 字串。儲存資料常用的資料型別。在 MongoDB 中,UTF-8 編碼的字串才是合法的。{"x" : "中文"}
Integer 整型數值。用於儲存數值。根據你所採用的伺服器,可分為 32 位或 64 位。{"x" : 3}
Boolean 布林值。用於儲存布林值(真/假), 布林型有 true 和 false,{"x" : true}
Double 雙精度浮點值。用於儲存浮點值。{"x" : 3.14}
Min/Max keys 將一個值與 BSON(二進位制的 JSON)元素的最低值和最高值相對比。
Arrays 用於將陣列或列表或多個值儲存為一個鍵。{"x" : ["a", "b", "c"]}
Timestamp 時間戳。記錄文件修改或新增的具體時間。
Object 用於內嵌文件。文件的值是巢狀文件,{"a" : {"b" : 3}}
Null 表示空值或者不存在的欄位,{"x" : null}
Symbol 符號。該資料型別基本上等同於字串型別,但不同的是,它一般用於採用特殊符號型別的語言。
Date 日期時間。用 UNIX 時間格式來儲存當前日期或時間。你可以指定自己的日期時間:建立 Date 物件,傳入年月日資訊。
Object ID 物件 ID。用於建立文件的 ID。物件 id 是一個 12 位元組的字串,是文件的唯一標識,{"x" : objectId()}
Binary Data 二進位制資料:二進位制資料是一個任意位元組的字串。它不能直接在 Shell 中使用。如果要將非 UTF-8 字元儲存到資料庫中,二進位制資料是唯一的方式
Code 程式碼型別。用於在文件中儲存 JavaScript 程式碼。
Regular expression 正則表示式型別。用於儲存正則表示式。{"x" : /[cba]/}