MongoDB是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產品,是非關系數(shù)據(jù)庫當中功能最豐富,最像關系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結構非常松散,是類似json的bjson格式,因此可以存儲比較復雜的數(shù)據(jù)類型。Mongo大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現(xiàn)類似關系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。
創(chuàng)新互聯(lián)建站-專業(yè)網站定制、快速模板網站建設、高性價比興寧網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式興寧網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋興寧地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。對于大多數(shù)的MongoDB的用戶來說,MongoDB就像是一個大黑盒。但是如果你能夠了解到MongoDB一些內部構造的話,將有利于你更好地理解和使用MongoDB。
BSON
在MongoDB中,文檔是對數(shù)據(jù)的抽象,它被使用在Client端和Server端的交互中。所有的Client端(各種語言的Driver)都會使用這種抽象,它的表現(xiàn)形式就是我們常說的BSON(Binary JSON)。
BSON 是一個輕量級的二進制數(shù)據(jù)格式。MongoDB能夠使用BSON,并將BSON作為數(shù)據(jù)的存儲存放在磁盤中。
當Client端要將寫入文檔,使用查詢等操作時,需要將文檔編碼為BSON格式,然后再發(fā)送給Server端。同樣,Server端的返回結果也是編碼為BSON格式再返回給Client端的。
使用BSON格式出于以下3種目的:
效率。BSON是為效率而設計的,它只需要使用很少的空間。即使在最壞的情況下,BSON格式也比JSON格式在最好的情況下存儲效率高。
傳輸性。在某些情況下,BSON會犧牲額外的空間讓數(shù)據(jù)的傳輸更加方便。比如,字符串的傳輸?shù)那熬Y會標識字符串的長度,而不是在字符串的末尾打上結束的標記。這樣的傳輸形式有利于MongoDB修改傳輸?shù)臄?shù)據(jù)。
性能。最后,BSON格式的編碼和解碼都是非??焖俚摹K褂昧薈風格的數(shù)據(jù)表現(xiàn)形式,這樣在各種語言中都可以高效地使用。
寫入協(xié)議
Client端訪問Server端使用了輕量級的TCP/IP寫入協(xié)議。這種協(xié)議在MongoDB Wiki中有詳細介紹,它其實是在BSON數(shù)據(jù)上面做了一層簡單的包裝。比如說,寫入數(shù)據(jù)的命令中包含了1個20字節(jié)的消息頭(由消息的長度和寫入命令標識組成),需要寫入的Collection名稱和需要寫入的數(shù)據(jù)。
數(shù)據(jù)文件
在MongoDB的數(shù)據(jù)文件夾中(默認路徑是/data/db)由構成數(shù)據(jù)庫的所有文件。每一個數(shù)據(jù)庫都包含一個.ns文件和一些數(shù)據(jù)文件,其中數(shù)據(jù)文件會隨著數(shù)據(jù)量的增加而變多。所以如果有一個數(shù)據(jù)庫名字叫做foo,那么構成foo這個數(shù)據(jù)庫的文件就會由foo.ns,foo.0,foo.1,foo.2等等組成。
數(shù)據(jù)文件每新增一次,大小都會是上一個數(shù)據(jù)文件的2倍,每個數(shù)據(jù)文件大2G。這樣的設計有利于防止數(shù)據(jù)量較小的數(shù)據(jù)庫浪費過多的空間,同時又能保證數(shù)據(jù)量較大的數(shù)據(jù)庫有相應的空間使用。
MongoDB會使用預分配方式來保證寫入性能的穩(wěn)定(這種方式可以使用–noprealloc關閉)。預分配在后臺進行,并且每個預分配的文件都用0進行填充。這會讓MongoDB始終保持額外的空間和空余的數(shù)據(jù)文件,從而避免了數(shù)據(jù)增長過快而帶來的分配磁盤空間引起的阻塞。
名字空間和盤區(qū)
每一個數(shù)據(jù)庫都由多個名字空間組成,每一個名字空間存儲了相應類型的數(shù)據(jù)。數(shù)據(jù)庫中的每一個Collection都有各自對應的名字空間,索引文件同樣也有名字空間。所有名字空間的元數(shù)據(jù)都存儲在.ns文件中。
名字空間中的數(shù)據(jù)在磁盤中分為多個區(qū)間,這個叫做盤區(qū)。在下圖中,foo這個數(shù)據(jù)庫包含3個數(shù)據(jù)文件,第三個數(shù)據(jù)文件屬于空的預分配文件。頭兩個數(shù)據(jù)文件被分為了相應的盤區(qū)對應不同的名字空間。
上圖顯示了名字空間和盤區(qū)的相關特點。每一個名字空間可以包含多個不同的盤區(qū),這些盤區(qū)并不是連續(xù)的。與數(shù)據(jù)文件的增長相同,每一個名字空間對應的盤區(qū)大小的也是隨著分配的次數(shù)不斷增長的。這樣做的目的是為了平衡名字空間浪費的空間與保持某一個名字空間中數(shù)據(jù)的連續(xù)性。上圖中還有一個需要注意的名字空間:$freelist,這個名字空間用于記錄不再使用的盤區(qū)(被刪除的Collection或索引)。每當名字空間需要分配新的盤區(qū)的時候,都會先查看$freelist是否有大小合適的盤區(qū)可以使用。
內存映射存儲引擎
MongoDB目前支持的存儲引擎為內存映射引擎。當MongoDB啟動的時候,會將所有的數(shù)據(jù)文件映射到內存中,然后操作系統(tǒng)會托管所有的磁盤操作。這種存儲引擎有以下幾種特點:
特性
它的特點是高性能、易部署、易使用,存儲數(shù)據(jù)非常方便。主要功能特性有:
所謂“面向集合”(Collenction-Orented),意思是數(shù)據(jù)被分組存儲在數(shù)據(jù)集中,被稱為一個集合(Collenction)。每個 集合在數(shù)據(jù)庫中都有一個唯一的標識名,并且可以包含無限數(shù)目的文檔。集合的概念類似關系型數(shù)據(jù)庫(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。
模式自由(schema-free),意味著對于存儲在mongodb數(shù)據(jù)庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數(shù)據(jù)庫里。
存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標識一個文檔,為字符串類型,而值則可以是各中復雜的文件類型。我們稱這種存儲形式為BSON(Binary Serialized dOcument Format)。
其它
在《MongoDB The Definitive Guide》中介紹的MongoDB內部構造只有這么多,如果真要把它說清楚,可能需要另外一本書來專門講述了。比如內部的JS解析,查詢的優(yōu)化,索引的建立等等。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對創(chuàng)新互聯(lián)成都網站設計公司的支持。如果你想了解更多相關內容請查看下面相關鏈接
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網站名稱:MongoDB的基本特性與內部構造的講解-創(chuàng)新互聯(lián)
分享URL:http://www.rwnh.cn/article36/psdpg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、響應式網站、網站導航、品牌網站制作、電子商務、網站設計公司
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容