我在MongoDB中生成了一个数据库test
,其中包含一个名为col
的集合。命令show dbs
给出:
admin (empty)
local 0.078GB
test 1.953GB
(我真的不知道,为什么尺寸大于1.9 GB,因为集合col
中只有21个小文档。)
命令db.stats()
告诉我,有3个可用的集合:
{
"db" : "test",
"collections" : 3,
"objects" : 25,
"avgObjSize" : 96.64,
"dataSize" : 2416,
"storageSize" : 857456640,
"numExtents" : 19,
"indexes" : 1,
"indexSize" : 8176,
"fileSize" : 2080374784,
"nsSizeMB" : 16,
"dataFileVersion" : {
"major" : 4,
"minor" : 5
},
"extentFreeList" : {
"num" : 2,
"totalSize" : 139264
},
"ok" : 1
}
但是当我输入show collections
时,只有两个集合是监听的。
col
system.indexes
那么,这第三个系列来自哪里?
它是否解释了为什么测试数据库大1.9GB? db.col.stats()
告诉我,存储了大量数据,但21个文档非常小:
{
"ns" : "test.col",
"count" : 21,
"size" : 2160,
"avgObjSize" : 102,
"storageSize" : 857440256,
"numExtents" : 17,
"nindexes" : 1,
"lastExtentSize" : 227803136,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 1,
"totalIndexSize" : 8176,
"indexSizes" : {
"_id_" : 8176
},
"ok" : 1
}
答案 0 :(得分:1)
好的,首先,大小:show dbs
显示实际数据文件的大小,而不是内容。
MongoDB预分配静态大小的数据文件,通常以64MB(+一个命名空间文件)开头,每个步骤加倍,直到达到2GB。每个后续数据文件的大小为2GB。一旦最后分配的数据文件接收到它的第一个条目,就会分配一个新的数据文件,从而消除了为请求分配数据文件的延迟。
很可能是您的测试数据库(作为默认数据库)要大得多,但文档甚至整个集合都被删除了。但是,截至撰写本文时,mongod 从不自动回收磁盘空间,但保留已分配的数据文件以供将来使用。
对于" Ghost"收藏:是的,有一个。它是数据库的名称空间集合(不出所料地称为system.namespaces
),这是隐式的。看看
db.system.namespaces.find()
话虽如此:不要使用任何system.*
收藏品。他们的名字并不好玩。