0. 概述

在 MongoDB 中,当 DB 存储的数据被删除掉大部分的数据,这个 DB 所占的文件空间并不会主动释放,于是就有点占坑的意思的了,于是我就需要将他压缩回来。

1. 问题描述

之前在一个应用中,不考虑数据清除,就直接往 DB 中塞数据,于是过了一段时间之后,DB 中的数据量有点多了,并且这些数据都不会被用到,所以就需要清除多余的数据。

但是,在清除完数据之后,发现 DB 的文件大小还是那么大,并没有因为数据量的变小而减少:

[[email protected]]# mongo
test:PRIMARY> db.stats(1024)

2. 解决方法

在搜寻一番之后,原来 MongoDB 不会自动做这个事情,需要自己手动回收:

[[email protected]]# mongo
test:PRIMARY> db.repairDatabase()

这样就可以了,再看一下 db 的文件大小就压缩到很小了,我的默认是 64M:

[[email protected]]# mongo
test:PRIMARY> db.stats(1024)
{
        "db" : "test",
        "collections" : 6,
        "objects" : 946,
        "avgObjSize" : 1971.4503171247356,
        "dataSize" : 1821,
        "storageSize" : 10960,
        "numExtents" : 11,
        "indexes" : 15,
        "indexSize" : 654,
        "fileSize" : 65536,
        "nsSizeMB" : 16,
        "dataFileVersion" : {
                "major" : 4,
                "minor" : 5
        },
        "extentFreeList" : {
                "num" : 0,
                "totalSize" : 0
        },
        "ok" : 1
}

3. Ref