MongoDB的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bjson格式,同時(shí)支持對(duì)數(shù)據(jù)建立索引。是一個(gè)面向集合的,模式自由的文檔型數(shù)據(jù)庫(kù)。
?
1.面向集合
意思是數(shù)據(jù)被分組存儲(chǔ)在數(shù)據(jù)集合中,被稱為一個(gè)集合
2.模式自由
意味著對(duì)于存儲(chǔ)在MongoDB 數(shù)據(jù)庫(kù)中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。提了這 么多次"無(wú)模式"或"模式自由",它到是個(gè)什么概念呢?例如,下面兩個(gè)記錄可以存在于同一 個(gè)集合里面: ?
{"welcome" : "Beijing"} {"age" : 25}
?
特點(diǎn):?
??面向集合存儲(chǔ),易于存儲(chǔ)對(duì)象類型的數(shù)據(jù)?
?
體系結(jié)構(gòu):
MongoDB 中一系列物理文件(數(shù)據(jù)文件,日志文件等)?
MongoDB 的文檔(document),相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的一行記錄。?
? 多個(gè)文檔組成一個(gè)集合(collection),相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)的表。?
多個(gè)集合(collection),邏輯上組織在一起,就是數(shù)據(jù)庫(kù)(database)?
數(shù)據(jù)存儲(chǔ)結(jié)構(gòu):
在MongoDB 內(nèi)部,每個(gè)數(shù)據(jù)庫(kù)都包含一個(gè).ns 文件和一些數(shù)據(jù)文件,而且這些數(shù)據(jù)文件會(huì)隨著數(shù)據(jù)量的 增加而變得越來(lái)越多。所以如果系統(tǒng)中有一個(gè)叫做 foo的數(shù)據(jù)庫(kù),那么構(gòu)成foo這個(gè)數(shù)據(jù)庫(kù) 的文件就會(huì)由foo.ns,foo.0,foo.1,foo.2 等等組成?
?MongoDB 內(nèi)部有預(yù)分配空間的機(jī)制,每個(gè)預(yù)分配的文件都用 0 進(jìn)行填充,由于有了這個(gè)機(jī)制, MongoDB始終保持額外的空間和空余的數(shù)據(jù)文件,從而有效避免了由于數(shù)據(jù)暴增而帶來(lái)的磁盤壓力過(guò)大的問(wèn)題。
? 由于表中數(shù)據(jù)量的增加,數(shù)據(jù)文件每新分配一次,它的大小都會(huì)是上一個(gè)數(shù)據(jù)文件大小的2 倍,每個(gè)數(shù)據(jù)文件最大 2G。這樣的機(jī)制有利于防止較小的數(shù)據(jù)庫(kù)浪費(fèi)過(guò)多的磁盤空間,同 時(shí)又能保證較大的數(shù)據(jù)庫(kù)有相應(yīng)的預(yù)留空間使用。
數(shù)據(jù)庫(kù)的每張表都對(duì)應(yīng)一個(gè)命名空間,每個(gè)索引也有對(duì)應(yīng)的命名空間。這些命名空間的元數(shù) 據(jù)都集中在*.ns文件中。?
需要注意的命名空間:$freelist,這個(gè)命名空間用于記錄不再使用 的盤區(qū)(被刪除的 Collection 或索引)。每當(dāng)命名空間需要分配新的盤區(qū)的時(shí)候,都會(huì)先查 看$freelist是否有大小合適的盤區(qū)可以使用,這樣就回收空閑的磁盤空間。
??
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
