MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bjson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
對于大多數的MongoDB的用戶來說,MongoDB就像是一個大黑盒。但是如果你能夠了解到MongoDB一些內部構造的話,將有利于你更好地理解和使用MongoDB。
BSON
在MongoDB中,文檔是對數據的抽象,它被使用在Client端和Server端的交互中。所有的Client端(各種語言的Driver)都會使用這種抽象,它的表現形式就是我們常說的BSON(Binary JSON)。
BSON 是一個輕量級的二進制數據格式。MongoDB能夠使用BSON,并將BSON作為數據的存儲存放在磁盤中。
當Client端要將寫入文檔,使用查詢等操作時,需要將文檔編碼為BSON格式,然后再發送給Server端。同樣,Server端的返回結果也是編碼為BSON格式再返回給Client端的。
使用BSON格式出于以下3種目的:
效率。BSON是為效率而設計的,它只需要使用很少的空間。即使在最壞的情況下,BSON格式也比JSON格式在最好的情況下存儲效率高。
傳輸性。在某些情況下,BSON會犧牲額外的空間讓數據的傳輸更加方便。比如,字符串的傳輸的前綴會標識字符串的長度,而不是在字符串的末尾打上結束的標記。這樣的傳輸形式有利于MongoDB修改傳輸的數據。
性能。最后,BSON格式的編碼和解碼都是非常快速的。它使用了C風格的數據表現形式,這樣在各種語言中都可以高效地使用。
寫入協議
Client端訪問Server端使用了輕量級的TCP/IP寫入協議。這種協議在MongoDB Wiki中有詳細介紹,它其實是在BSON數據上面做了一層簡單的包裝。比如說,寫入數據的命令中包含了1個20字節的消息頭(由消息的長度和寫入命令標識組成),需要寫入的Collection名稱和需要寫入的數據。
數據文件
在MongoDB的數據文件夾中(默認路徑是/data/db)由構成數據庫的所有文件。每一個數據庫都包含一個.ns文件和一些數據文件,其中數據文件會隨著數據量的增加而變多。所以如果有一個數據庫名字叫做foo,那么構成foo這個數據庫的文件就會由foo.ns,foo.0,foo.1,foo.2等等組成。
數據文件每新增一次,大小都會是上一個數據文件的2倍,每個數據文件最大2G。這樣的設計有利于防止數據量較小的數據庫浪費過多的空間,同時又能保證數據量較大的數據庫有相應的空間使用。
MongoDB會使用預分配方式來保證寫入性能的穩定(這種方式可以使用 主站蜘蛛池模板: 国产精品一线二线三线 | 成人高清在线 | 少妇久久久 | 操操操夜夜操 | 精品无人乱码一区二区三区 | 日韩在线免费 | 欧美激情视频免费观看 | 狠狠操av| 国产成人精品免高潮在线观看 | 欧美性猛交一区二区三区精品 | 伊人伊人 | 久久99精品久久久久蜜臀 | 亚洲午夜精品久久久久久app | 91啪影院 | 国产精品毛片无码 | 亚洲精品电影在线观看 | 国产成人精品久久二区二区91 | 国产精品99久久免费观看 | 日韩一区二区在线观看视频 | 亚洲一级片 | 久久影院国产 | 午夜在线免费观看 | 亚洲经典视频在线观看 | 在线视频成人 | 国产精品美女高潮无套久久 | 亚洲一区二区三区四区五区中文 | 精品国产一区二区三区不卡蜜臂 | 99热.com| 亚洲精品日韩色噜噜久久五月 | 国产在线观看欧美 | 毛片国产 | 国产永久免费观看 | 久久伊人久久 | 99精品热| 欧美一级在线免费观看 | 久久久久国 | 亚洲人人 | 日韩激情二区 | 久久精品不卡 | 国产精品91av | 日韩成人在线播放 |