MongoDB學(xué)習(xí)筆記之了解MongoDB
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ù)
- 模式自由
- 支持動(dòng)態(tài)查詢
- 支持完全索引,包含內(nèi)部對(duì)象
- 支持查詢
- 支持復(fù)制和故障恢復(fù)
- 使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻等)
- 自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性
- 文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)
體系結(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ū)可以使用,這樣就回收空閑的磁盤空間。
原文鏈接:http://www.cnblogs.com/zhy4606/archive/2011/09/13/2174411.html
【編輯推薦】