MongoDB是一個開源的、無模式的文檔型資料庫,是當前流行的NOSQL類型資料庫的一種(非關係型資料庫)
MongoDB的資料結構非常鬆散,是類似json的bjson格式,同時支援對資料建立索引。是一個面向集合的,模式自由的文檔型資料庫。
1.面向集合
意思是資料被分組儲存在資料集合中,被稱為一個集合
2.模式自由
意味著對於儲存在MongoDB 資料庫中的檔案,我們不需要知道它的任何結構定義。提了這 麼多次"無模式"或"模式自由",它到是個什麼概念呢?例如,下面兩個記錄可以存在於同一 個集合裡面:
{"welcome" : "Beijing"} {"age" : 25}
特點:
面向集合儲存,易於儲存物件類型的資料
模式自由 支援動態查詢 支援完全索引,包含內部對象 支援查詢 支援複製和故障恢複 使用高效的位元據儲存,包括大型物件(如視頻等) 自動處理片段,以支援雲端運算層次的擴充性 檔案儲存體格式為BSON(一種JSON的擴充)
體繫結構:
MongoDB 中一系列物理檔案(資料檔案,記錄檔等)
MongoDB 的文檔(document),相當於關聯式資料庫中的一行記錄。
多個文檔組成一個集合(collection),相當於關聯式資料庫的表。
多個集合(collection),邏輯上組織在一起,就是資料庫(database)
資料存放區結構:
在MongoDB 內部,每個資料庫都包含一個.ns 檔案和一些資料檔案,而且這些資料檔案會隨著資料量的 增加而變得越來越多。所以如果系統中有一個叫做 foo的資料庫,那麼構成foo這個資料庫 的檔案就會由foo.ns,foo.0,foo.1,foo.2 等等組成
MongoDB 內部有預分配空間的機制,每個預分配的檔案都用 0 進行填充,由於有了這個機制, MongoDB始終保持額外的空間和空餘的資料檔案,從而有效避免了由於資料暴增而帶來的磁碟壓力過大的問題。
由於表中資料量的增加,資料檔案每新分配一次,它的大小都會是上一個資料檔案大小的2 倍,每個資料檔案最大 2G。這樣的機制有利於防止較小的資料庫浪費過多的磁碟空間,同 時又能保證較大的資料庫有相應的預留空間使用。
資料庫的每張表都對應一個命名空間,每個索引也有對應的命名空間。這些命名空間的元數 據都集中在*.ns檔案中。
需要注意的命名空間:$freelist,這個命名空間用於記錄不再使用 的盤區(被刪除的 Collection 或索引)。每當命名空間需要分配新的盤區的時候,都會先查 看$freelist是否有大小合適的盤區可以使用,這樣就回收閒置磁碟空間。