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

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