假设集合名称测试具有以下数据
{ a : 1}
{ a : 2}
此外,它在{a:1}
上编入索引> db.test.stats()
{
"ns" : "mydb.test",
"count" : 2,
"size" : 96,
"avgObjSize" : 48,
"storageSize" : 8192,
"numExtents" : 1,
"nindexes" : 2,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 1,
"totalIndexSize" : 16352,
"indexSizes" : {
"_id_" : 8176,
"a_1" : 8176
},
"ok" : 1
}
> db.test.totalSize()
24544
根据documentation - 它返回集合中数据的总大小加上集合上每个索引的大小。怎么样 ?从上面的数据,
数据的总大小 - > "大小" :96
每个索引的大小 - > 8176 * 2 - > 16392
总计 - > 16392 + 96 = 16488
为什么会有区别?我错过了什么?
答案 0 :(得分:1)
totalSize等于storageSize + totalIndexSize
。正如您将注意到的,这些加起来恰好是24544。
为了避免在将新文档添加到集合时不断重新分配新的硬盘驱动器空间以及由此产生的文件系统碎片,MongoDB会提前为每个集合分配存储空间。因此,集合使用的总空间总是大于其数据的总和。