1. 程式人生 > >Mongo進階--儲存原理

Mongo進階--儲存原理

> use test
switched to db test
> db.stats();
{
	"db" : "test",
	"collections" : 3,  ##collection的個數
	"objects" : 1000006, ##documents總條數
	"avgObjSize" : 495.9974400153599, ##record的平均大小,單位byte
	"dataSize" : 496000416, ##document所佔空間的總量
	"storageSize" : 629649408, ##
	"numExtents" : 18,  ##extents個數
	"indexes" : 2,
	"indexSize" : 108282944,
	"fileSize" : 1006632960,
	"nsSizeMB" : 16, ##namespace檔案大小
	"extentFreeList" : {   ##尚未使用(已分配尚未使用、已刪除但尚未被重用)的extent列表
		"num" : 0,
		"totalSize" : 0
	},
	"dataFileVersion" : {
		"major" : 4,
		"minor" : 22
	},
	"ok" : 1
}

列表資訊中有幾個欄位簡單介紹一下:

    1) dataSize:documents所佔的空間總量,mongodb將會為每個document分配一定空間用於儲存資料,每個document所佔空間包括“文件實際大小” + “padding”,對於MMAPV1引擎,mongodb預設採用了“Power of 2 Sized Allocations”策略,這也意味著通常會有padding,不過如果你的document不會被update(或者update為in-place方式,不會導致文件尺寸變大),可以在在createCollection是指定noPadding屬性為true,這樣dataSize的大小就是documents實際大小;當documents被刪除後,將導致dataSize減小;不過如果在原有document的空間內(包括其padding空間)update(或者replace),則不會導致dataSize的變大,因為mongodb並沒有分配任何新的document空間。

    2)storageSize:所有collection的documents佔用總空間,包括那些已經刪除的documents所佔的空間,為儲存documents的extents所佔空間總和。文件的刪除或者收縮不會導致storageSize變小。

    3)indexSize:所用collection的索引資料的大小,為儲存indexes的extents所佔空間的總和。

    4)fileSize:為底層所有data files的大小總和,但不包括namespace檔案。為storageSize、indexSize、以及一些尚未使用的空間等等。當刪除database、collections時會導致此值變小

此外,如果你想檢視一個collection中extents的分配情況,可以使用db.<collection名稱>.stats(),結構與上述類似;如果你希望更細緻的瞭解collection中extents的全部資訊,則可以使用db.<collection名稱>.validate(),此方法接收一個boolean值,表示是否檢視明細,這個指令會scan全部的data files,因此比較耗時: