現在的位置: 首頁 > 資料庫 > 正文

BSON怎優化來實現目標

2020年07月02日 資料庫 ⁄ 共 1399字 ⁄ 字型大小 評論關閉

  BSON是由10gen開發的一個數據格式,目前主要用於MongoDB中,是MongoDB的數據存儲格式。BSON基於JSON格式,選擇JSON進行改造的原因主要是JSON的通用性及JSON的schemaless的特性。下面學步園小編來講解下BSON怎優化來實現目標?

  BSON怎優化來實現目標

  1.更快的遍歷速度

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

  MongoDB優化:對於MongoDB來說,由於採用了MMAP來做內存與數據文件的映射,在更新或者獲取Document的某一個欄位時,如果需要先讀取其前面的所有欄位,會導致物理內存由於讀操作被載入到不必要的欄位上,導致資源的不合理分配。而採用BSON只需要讀到相應的位置然後跨過無用內容讀取需要內容即可。

  2.操作更簡易

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

  MongoDB優化:所以使用MongoDB的一個技巧是將長度可能變化的欄位盡量命名靠後(MongoDB在update操作後會將欄位按key值按字母順序重排,所以靠後的意思是按a-z的順序取名)。這樣在更新的時候如果導致數字變長,不需要移動大量數據。一個典型的例子是如果用二進位類型存儲文件時,如果文件名或者文件描述可能會變長,那麼盡量將這個欄位取名靠後是一個明智的選擇,否則在文件名或文件描述欄位變化時,會導致移動很長的二進位數據,造成不必要的浪費。

  BSON怎優化來實現目標

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

  JSON是一個很方便的數據交換格式,但是其類型比較有限。BSON在其基礎上增加了「bytearray」數據類型。這使得二進位的存儲不再需要先base64轉換後再存成JSON。大大減少了計算開銷和數據大小。

  當然,在有的時候,BSON相對JSON來說也並沒有空間上的優勢,比如對{「field」:7},在JSON的存儲上7隻使用了一個位元組,而如果用BSON,那就是至少4個位元組(32位)

  MongoDB優化:在MongoDB中,如果你的欄位是數字型,並且涉及到數據加減操作的,那麼建議存在int型,但如果是一個固定不變的數字,並且在四位以下的話,可以考慮存成字元串類型。這樣會節省空間。

  目前在10gen的努力下,BSON已經有了針對多種語言的編碼解碼包。並且都是Apache2license下開源的。並且還在隨著MongoDB進一步地發展。關於BSON,你可以在其官方網站bsonspec.org上獲取更多信息。

  以上就是關於「BSON怎優化來實現目標」的內容,希望對大家有用。更多資訊請關注學步園。學步園,您學習IT技術的優質平台!

抱歉!評論已關閉.