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
}