日韩av手机在线免费观看_四虎免看黄_亚洲一区中文字幕_亚洲小视频网站_国产一区日韩在线_国产欧美精品一区二区

下載吧 - 綠色安全的游戲和軟件下載中心

軟件下載吧

當(dāng)前位置:軟件下載吧 > 數(shù)據(jù)庫(kù) > DB2 > MongoDB的基本特性與內(nèi)部構(gòu)造的講解

MongoDB的基本特性與內(nèi)部構(gòu)造的講解

時(shí)間:2024-03-26 14:44作者:下載吧人氣:35

MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類(lèi)似json的bjson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類(lèi)型。Mongo最大的特點(diǎn)是他支持的查詢(xún)語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類(lèi)似于面向?qū)ο蟮牟樵?xún)語(yǔ)言,幾乎可以實(shí)現(xiàn)類(lèi)似關(guān)系數(shù)據(jù)庫(kù)單表查詢(xún)的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。

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

BSON

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

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

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

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

效率。BSON是為效率而設(shè)計(jì)的,它只需要使用很少的空間。即使在最壞的情況下,BSON格式也比JSON格式在最好的情況下存儲(chǔ)效率高。
傳輸性。在某些情況下,BSON會(huì)犧牲額外的空間讓數(shù)據(jù)的傳輸更加方便。比如,字符串的傳輸?shù)那熬Y會(huì)標(biāo)識(shí)字符串的長(zhǎng)度,而不是在字符串的末尾打上結(jié)束的標(biāo)記。這樣的傳輸形式有利于MongoDB修改傳輸?shù)臄?shù)據(jù)。
性能。最后,BSON格式的編碼和解碼都是非常快速的。它使用了C風(fēng)格的數(shù)據(jù)表現(xiàn)形式,這樣在各種語(yǔ)言中都可以高效地使用。

寫(xiě)入?yún)f(xié)議

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

數(shù)據(jù)文件

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

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

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

名字空間和盤(pán)區(qū)

每一個(gè)數(shù)據(jù)庫(kù)都由多個(gè)名字空間組成,每一個(gè)名字空間存儲(chǔ)了相應(yīng)類(lèi)型的數(shù)據(jù)。數(shù)據(jù)庫(kù)中的每一個(gè)Collection都有各自對(duì)應(yīng)的名字空間,索引文件同樣也有名字空間。所有名字空間的元數(shù)據(jù)都存儲(chǔ)在.ns文件中。

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

MongoDB的基本特性與內(nèi)部構(gòu)造的講解

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

內(nèi)存映射存儲(chǔ)引擎

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

  • MongoDB中關(guān)于內(nèi)存管理的代碼非常精簡(jiǎn),畢竟相關(guān)的工作已經(jīng)有操作系統(tǒng)進(jìn)行托管。
  • MongoDB服務(wù)器使用的虛擬內(nèi)存將非常巨大,并將超過(guò)整個(gè)數(shù)據(jù)文件的大小。不用擔(dān)心,操作系統(tǒng)會(huì)去處理這一切。要注意的是,MongoDB自己是不管理內(nèi)存的,無(wú)法指定內(nèi)存大小,完全交給操作系統(tǒng)來(lái)管理,因此有時(shí)候是不可控的,在生產(chǎn)環(huán)境使用必須在OS層面監(jiān)控內(nèi)存使用情況。
  • MongoDB無(wú)法控制數(shù)據(jù)寫(xiě)入磁盤(pán)的順序,這樣將導(dǎo)致MongoDB無(wú)法實(shí)現(xiàn)writeahead日志的特性。所以,如果MongoDB希望提供一種durability的特性,需要實(shí)現(xiàn)另外一種存儲(chǔ)引擎。
  • 32位系統(tǒng)的MongoDB服務(wù)器每一個(gè)Mongod實(shí)例只能使用2G的數(shù)據(jù)文件。這是由于地址指針只能支持32位。

特性

它的特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便。主要功能特性有:

  • 面向集合存儲(chǔ),易存儲(chǔ)對(duì)象類(lèi)型的數(shù)據(jù)。
  • 模式自由。
  • 支持動(dòng)態(tài)查詢(xún)。
  • 支持完全索引,包含內(nèi)部對(duì)象。
  • 支持查詢(xún)。
  • 支持復(fù)制和故障恢復(fù)。
  • 使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻等)。
  • 自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性
  • 支持RUBY,PYTHON,JAVA,C++,PHP等多種語(yǔ)言。
  • 文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)
  • 可通過(guò)網(wǎng)絡(luò)訪問(wèn)

所謂“面向集合”(Collenction-Orented),意思是數(shù)據(jù)被分組存儲(chǔ)在數(shù)據(jù)集中,被稱(chēng)為一個(gè)集合(Collenction)。每個(gè) 集合在數(shù)據(jù)庫(kù)中都有一個(gè)唯一的標(biāo)識(shí)名,并且可以包含無(wú)限數(shù)目的文檔。集合的概念類(lèi)似關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。

模式自由(schema-free),意味著對(duì)于存儲(chǔ)在mongodb數(shù)據(jù)庫(kù)中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。如果需要的話,你完全可以把不同結(jié)構(gòu)的文件存儲(chǔ)在同一個(gè)數(shù)據(jù)庫(kù)里。

存儲(chǔ)在集合中的文檔,被存儲(chǔ)為鍵-值對(duì)的形式。鍵用于唯一標(biāo)識(shí)一個(gè)文檔,為字符串類(lèi)型,而值則可以是各中復(fù)雜的文件類(lèi)型。我們稱(chēng)這種存儲(chǔ)形式為BSON(Binary Serialized dOcument Format)。

其它

在《MongoDB The Definitive Guide》中介紹的MongoDB內(nèi)部構(gòu)造只有這么多,如果真要把它說(shuō)清楚,可能需要另外一本書(shū)來(lái)專(zhuān)門(mén)講述了。比如內(nèi)部的JS解析,查詢(xún)的優(yōu)化,索引的建立等等。

總結(jié)

本篇文章到此結(jié)束,如果您有相關(guān)技術(shù)方面疑問(wèn)可以聯(lián)系我們技術(shù)人員遠(yuǎn)程解決,感謝大家支持本站!

標(biāo)簽MongoDB,基本,特性,內(nèi)部,構(gòu)造,講解

相關(guān)下載

查看所有評(píng)論+

網(wǎng)友評(píng)論

網(wǎng)友
您的評(píng)論需要經(jīng)過(guò)審核才能顯示

熱門(mén)閱覽

最新排行

公眾號(hào)

主站蜘蛛池模板: av网站在线免费观看 | www.成人.com | 亚洲精品一区二区三区蜜桃久 | 日本三级网址 | 成人福利网 | 91精品国产综合久久精品 | 一区二区中文字幕 | 日韩av一区在线观看 | 亚洲播放一区 | 精品久久久久久久久久久久久久 | 久久久久久久久中文字幕 | 亚洲国产精品成人无久久精品 | 午夜视频一区二区 | 国产精品永久久久久 | 日韩精品在线网站 | 欧美爱爱视频网站 | 午夜影视免费片在线观看 | 日韩av免费在线观看 | 看片网站在线 | 综合色播| 色就是色欧美 | 久久国产成人午夜av影院武则天 | 青青草国产在线观看 | 亚洲国产一区二区三区四区 | 国产不卡在线观看 | 亚洲精品在线视频 | 免费一区二区三区 | 国产成人精品在线 | 在线一区二区三区 | 国产精品久久久亚洲 | 男女爱爱网站 | 久久精品亚洲 | 国产一区二区日韩 | 黄色网址在线免费观看 | 欧美一级二级三级 | 在线观看国产视频 | 美女黄18岁以下禁止观看 | 成人伊人 | 91成人午夜性a一级毛片 | 亚洲国产一区二区视频 | 成人a网 |