mongodb中命名空間指的是數據庫名稱和集合名稱的串聯,而集合是mongodb在其中存儲BSON對象,并且mongodb每個集合和每個索引都對應一個命名空間。
具體內容如下:
MongoDB內部有預分配空間的機制,每個預分配的文件都用0進行填充。
數據文件每新分配一次,它的大小都是上一個數據文件大小的2倍,每個數據文件最大2G。
MongoDB每個集合和每個索引都對應一個命名空間,這些命名空間的元數據集中在16M的*.ns文件中,平均每個命名占用約 628 字節,也即整個數據庫的命名空間的上限約為24000。
如果每個集合有一個索引(比如默認的_id索引),那么最多可以創建12000個集合。如果索引數更多,則可創建的集合數就更少了。同時,如果集合數太多,一些操作也會變慢。
要建立更多的集合的話,MongoDB 也是支持的,只需要在啟動時加上“--nssize”參數,這樣對應數據庫的命名空間文件就可以變得更大以便保存更多的命名。這個命名空間文件(.ns文件)最大可以為 2G。
每個命名空間對應的盤區不一定是連續的。與數據文件增長相同,每個命名空間對應的盤區大小都是隨分配次數不斷增長的。目的是為了平衡命名空間浪費的空間與保持一個命名空間數據的連續性。
需要注意的一個命名空間$freelist,這個命名空間用于記錄不再使用的盤區(被刪除的Collection或索引)。每當命名空間需要分配新盤區時,會先查看$freelist是否有大小合適的盤區可以使用,如果有就回收空閑的磁盤空間。