從JSON進化到BSON

自從MEAN引導的JSON數據格式取代傳統JAVA推崇的XML以後, json的發展卻停滯不前了, 當然這是好事, 因爲穩定的結構是不需要向下兼容的, 但是json之所以輕便簡單就是源於它的類型, 額, 確切說json就是一個字符串, 是文本, 可以存儲在文件中或者數據庫字段裏.

要知道, 在整個宇宙都即將面向對象的年代, 數據類型(包括媒體類型)是多樣化的, 而通常媒體類型和數據類型是隔離的, 以爲多媒體包括什麼文本啦, 圖像啦, 圖片, 音視頻等等, 而數據類型指的是數字, 字符串, 數組, 對象, 二進制等等, 這兩者是無法相通的, 比如這些數據結構是無法直接存儲在文件裏, 也無法直接傳輸在http的body中, 但有沒有發現, 有一個特殊的類型是兩者的唯一交集, 那即是string(文本,字符串), string是萬能的, 那裏都支持處理, 存儲, 傳輸string類型. 但是現在的需求是多樣化的, json這種基於string的數據結構滿足不了一些高級需求, 於是乎json的擴展---bson誕生了 .

  bson是由10gen開發的一個數據格式,目前主要用於mongoDB中,是mongoDB的數據存儲格式。bson基於json格式,選擇json進行改造的原因主要是json的通用性及json的schemaless的特性。

  bson主要會實現以下三點目標:

1.更快的遍歷速度

  對json格式來說,太大的json結構會導致數據遍歷非常慢。在json中,要跳過一個文檔進行數據讀取,需要對此文檔進行掃描才行,需要進行麻煩的數據結構匹配,比如括號的匹配。   而bson對json的一大改進就是,它會將json的每一個元素的長度存在元素的頭部,這樣你只需要讀取到元素長度就能直接seek到指定的點上進行讀取了。

2.操作更簡易

  對json來說,數據存儲是無類型的,比如你要修改基本一個值,從9到10,由於從一個字符變成了兩個,所以可能其後面的所有內容都需要往後移一位纔可以。   而使用bson,你可以指定這個列爲數字列,那麼無論數字從9長到10還是100,我們都只是在存儲數字的那一位上進行修改,不會導致數據總長變大。   當然,在mongoDB中,如果數字從整形增大到長整型,還是會導致數據總長變大的。

3.增加了額外的數據類型

  json是一個很方便的數據交換格式,但是其類型比較有限。   bson在其基礎上增加了“byte array”數據類型。這使得二進制的存儲不再需要先base64轉換後再存成json,大大減少了計算開銷和數據大小。   當然,在有的時候,bson相對json來說也並沒有空間上的優勢,比如對{“field”:7},在json的存儲上7只使用了一個字節,而如果用bson,那就是至少4個字節(32位)

  目前在10gen的努力下,bson已經有了針對多種語言的編碼解碼包。並且都是Apache 2 license下開源的。並且還在隨着mongoDB進一步地發展。

總上所述:

數據結構:   json是像字符串一樣存儲的,bson是按結構存儲的(像數組 或者說struct)

存儲空間   bson>json

操作速度   bson>json。比如,遍歷查找:json需要掃字符串,而bson可以直接定位

修改:   json也要大動大移,bson就不需要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章