MongoDB中是否有“鬼集”

时间:2014-11-10 11:06:58

标签: mongodb filesize database

我在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
}

1 个答案:

答案 0 :(得分:1)

大小

好的,首先,大小:show dbs显示实际数据文件的大小,而不是内容

MongoDB预分配静态大小的数据文件,通常以64MB(+一个命名空间文件)开头,每个步骤加倍,直到达到2GB。每个后续数据文件的大小为2GB。一旦最后分配的数据文件接收到它的第一个条目,就会分配一个新的数据文件,从而消除了为请求分配数据文件的延迟。

很可能是您的测试数据库(作为默认数据库)要大得多,但文档甚至整个集合都被删除了。但是,截至撰写本文时,mongod 从不自动回收磁盘空间,但保留已分配的数据文件以供将来使用。

" Ghost"集合

对于" Ghost"收藏:是的,有一个。它是数据库的名称空间集合(不出所料地称为system.namespaces),这是隐式的。看看

的输出
db.system.namespaces.find()

话虽如此:不要使用任何system.*收藏品。他们的名字并不好玩。