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時會導致此值變小