亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5026 | 回復(fù): 1
打印 上一主題 下一主題

[MongoDB] MongoDB的內(nèi)部構(gòu)造 From 《MongoDB The Definitive Guide》 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-02-21 21:04 |只看該作者 |倒序瀏覽
MongoDB的內(nèi)部構(gòu)造 From 《MongoDB The Definitive Guide》



本文是一篇轉(zhuǎn)載文章,正如作者所言,MongoDB的官方文檔基本是how to do的介紹,而關(guān)于how it worked卻少之又少,本人也剛買了《MongoDB The Definitive Guide》的影印版,還沒來得及看,本文原作者將其書中一些關(guān)于MongoDB內(nèi)部現(xiàn)實方面的一些知識介紹如下,值得一看。

另外,關(guān)于MongoDB內(nèi)部實現(xiàn)的知識,還可以看一下本站的另一篇文章:《深入MongoDB精髓技巧》

原文鏈接:http://www.cnblogs.com/gpcuster/archive/2010/10/04/1841877.html

今天下載了《MongoDB The Definitive Guide》電子版,瀏覽了里面的內(nèi)容,還是挺豐富的。是官網(wǎng)文檔實際應(yīng)用方面的一個補(bǔ)充。和官方文檔類似,介紹MongoDB的內(nèi)部原理是少之又少,只有在附錄的一個章節(jié)中介紹了相關(guān)內(nèi)容。

對于大多數(shù)的MongoDB的用戶來說,MongoDB就像是一個大黑盒,但是如果你能夠了解到MongoDB內(nèi)部一些構(gòu)造的話,將有利于你更好地理解和使用MongoDB。

BSON
在MongoDB中,文檔是對數(shù)據(jù)的抽象,它被使用在Client端和Server端的交互中。所有的Client端(各種語言的Driver)都會使用這種抽象,它的表現(xiàn)形式就是我們常說的BSON(Binary JSON )。

BSON是一個輕量級的二進(jìn)制數(shù)據(jù)格式。MongoDB能夠使用BSON,并將BSON作為數(shù)據(jù)的存儲存放在磁盤中。

當(dāng)Client端要將寫入文檔,使用查詢等等操作時,需要將文檔編碼為BSON格式,然后再發(fā)送給Server端。同樣,Server端的返回結(jié)果也是編碼為BSON格式再放回給Client端的。

使用BSON格式出于以下3種目的:

效率
BSON是為效率而設(shè)計的,它只需要使用很少的空間。即使在最壞的情況下,BSON格式也比JSON格式再最好的情況下存儲效率高。

傳輸性
在某些情況下,BSON會犧牲額外的空間讓數(shù)據(jù)的傳輸更加方便。比如,字符串的傳輸?shù)那熬Y會標(biāo)識字符串的長度,而不是在字符串的末尾打上結(jié)束的標(biāo)記。這樣的傳輸形式有利于MongoDB修改傳輸?shù)臄?shù)據(jù)。

性能
最后,BSON格式的編碼和解碼都是非?焖俚。它使用了C風(fēng)格的數(shù)據(jù)表現(xiàn)形式,這樣在各種語言中都可以高效地使用。

更多關(guān)于BSON的介紹,可以參考:http://www.bsonspec.org。

寫入?yún)f(xié)議
Client端訪問Server端使用了輕量級的TCP/IP寫入?yún)f(xié)議。這種協(xié)議在MongoDB Wiki中有詳細(xì)介紹,它其實是在BSON數(shù)據(jù)上面做了一層簡單的包裝。比如說,寫入數(shù)據(jù)的命令中包含了1個20字節(jié)的消息頭(由消息的長度和寫入命令標(biāo)識組成),需要寫入的Collection名稱和需要寫入的數(shù)據(jù)。

數(shù)據(jù)文件
在MongoDB的數(shù)據(jù)文件夾中(默認(rèn)路徑是/data/db)由構(gòu)成數(shù)據(jù)庫的所有文件。每一個數(shù)據(jù)庫都包含一個.ns文件和一些數(shù)據(jù)文件,其中數(shù)據(jù)文件會隨著數(shù)據(jù)量的增加而變多。所以如果有一個數(shù)據(jù)庫名字叫做foo,那么構(gòu)成foo這個數(shù)據(jù)庫的文件就會由foo.ns,foo.0,foo.1,foo.2等等組成。

數(shù)據(jù)文件每新增一次,大小都會是上一個數(shù)據(jù)文件的2倍,每個數(shù)據(jù)文件最大2G。這樣的設(shè)計有利于防止數(shù)據(jù)量較小的數(shù)據(jù)庫浪費過多的空間,同時又能保證數(shù)據(jù)量較大的數(shù)據(jù)庫有相應(yīng)的空間使用。

MongoDB會使用預(yù)分配方式來保證寫入性能的穩(wěn)定(這種方式可以使用–noprealloc關(guān)閉)。預(yù)分配在后臺進(jìn)行,并且每個預(yù)分配的文件都用0進(jìn)行填充。這會讓MongoDB始終保持額外的空間和空余的數(shù)據(jù)文件,從而避免了數(shù)據(jù)增長過快而帶來的分配磁盤空間引起的阻塞。

名字空間和盤區(qū)
每一個數(shù)據(jù)庫都由多個名字空間組成,每一個名字空間存儲了相應(yīng)類型的數(shù)據(jù)。數(shù)據(jù)庫中的每一個Collection都有各自對應(yīng)的名字空間,索引文件同樣也有名字空間。所有名字空間的元數(shù)據(jù)都存儲在.ns文件中。

名字空間中的數(shù)據(jù)在磁盤中分為多個區(qū)間,這個叫做盤區(qū)。在下圖中,foo這個數(shù)據(jù)庫包含3個數(shù)據(jù)文件,第三個數(shù)據(jù)文件屬于空的預(yù)分配文件。頭兩個數(shù)據(jù)文件被分為了相應(yīng)的盤區(qū)對應(yīng)不同的名字空間。



上圖顯示了名字空間和盤區(qū)的相關(guān)特點。每一個名字空間可以包含多個不同的盤區(qū),這些盤區(qū)并不是連續(xù)的。與數(shù)據(jù)文件的增長相同,每一個名字空間對應(yīng)的盤區(qū)大小的也是隨著分配的次數(shù)不斷增長的。這樣做的目的是為了平衡名字空間浪費的空間與保持某一個名字空間中數(shù)據(jù)的連續(xù)性。上圖中還有一個需要注意的名字空間:$freelist,這個名字空間用于記錄不再使用的盤區(qū)(被刪除的Collection或索引)。每當(dāng)名字空間需要分配新的盤區(qū)的時候,都會先查看$freelist是否有大小合適的盤區(qū)可以使用。

內(nèi)存映射存儲引擎
MongoDB目前支持的存儲引擎為內(nèi)存映射引擎。當(dāng)MongoDB啟動的時候,會將所有的數(shù)據(jù)文件映射到內(nèi)存中,然后操作系統(tǒng)會托管所有的磁盤操作。這種存儲引擎有以下幾種特點:

* MongoDB中關(guān)于內(nèi)存管理的代碼非常精簡,畢竟相關(guān)的工作已經(jīng)有操作系統(tǒng)進(jìn)行托管。
* MongoDB服務(wù)器使用的虛擬內(nèi)存將非常巨大,并將超過整個數(shù)據(jù)文件的大小。不用擔(dān)心,操作系統(tǒng)會去處理這一切。
* MongoDB無法控制數(shù)據(jù)寫入磁盤的順序,這樣將導(dǎo)致MongoDB無法實現(xiàn)writeahead日志的特性。所以,如果MongoDB希望提供一種durability的特性(這一特性可以參考我寫的關(guān)于Cassandra文章:http://www.cnblogs.com/gpcuster/tag/Cassandra/),需要實現(xiàn)另外一種存儲引擎。
* 32位系統(tǒng)的MongoDB服務(wù)器每一個Mongod實例只能使用2G的數(shù)據(jù)文件。這是由于地址指針只能支持32位。

其他
在《MongoDB The Definitive Guide》中介紹的MongoDB內(nèi)部構(gòu)造只有這么多,如果真要把它說清楚,可能需要另外一本書來專門講述了。比如內(nèi)部的JS解析,查詢的優(yōu)化,索引的建立等等。有興趣的朋友可以直接參考源代碼


論壇徽章:
0
2 [報告]
發(fā)表于 2012-02-24 17:44 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP