我有一个应用程序使用mongo来存储短期数据.所有超过45分钟的数据都会通过以下脚本删除:

oldSearches = [list of old searches]
connection = Connection()
db = connection.searchDB
res = db.results.remove{'search_id':{"$in":oldSearches}})

我已经判断了当前状态-

>db.results.stats()
{
        "ns" : "searchDB.results",
        "count" : 2865,
        "size" : 1003859656,
        "storageSize" : 29315124464,
        "nindexes" : 1,
        "ok" : 1
}

因此,根据这个数据,1gb的数据占用了29GB的存储空间.数据文件夹看起来像这样(您可能会看到许多文件非常旧,最后在5月中旬访问):

ls -l /var/lib/mongodb/
total 31506556
-rwxr-xr-x 1 mongodb nogroup          6 2011-06-05 18:28 mongod.lock
-rw------- 1 mongodb nogroup   67108864 2011-05-13 17:45 searchDB.0
-rw------- 1 mongodb nogroup  134217728 2011-05-13 14:45 searchDB.1
-rw------- 1 mongodb nogroup 2146435072 2011-05-20 20:45 searchDB.10
-rw------- 1 mongodb nogroup 2146435072 2011-05-28 00:00 searchDB.11
-rw------- 1 mongodb nogroup 2146435072 2011-05-27 13:45 searchDB.12
-rw------- 1 mongodb nogroup 2146435072 2011-05-29 16:45 searchDB.13
-rw------- 1 mongodb nogroup 2146435072 2011-06-07 13:50 searchDB.14
-rw------- 1 mongodb nogroup 2146435072 2011-06-06 01:45 searchDB.15
-rw------- 1 mongodb nogroup 2146435072 2011-06-07 13:50 searchDB.16
-rw------- 1 mongodb nogroup 2146435072 2011-06-07 13:50 searchDB.17
-rw------- 1 mongodb nogroup 2146435072 2011-06-06 09:07 searchDB.18
-rw------- 1 mongodb nogroup  268435456 2011-05-13 14:45 searchDB.2
-rw------- 1 mongodb nogroup  536870912 2011-05-11 00:45 searchDB.3
-rw------- 1 mongodb nogroup 1073741824 2011-05-29 23:37 searchDB.4
-rw------- 1 mongodb nogroup 2146435072 2011-05-13 17:45 searchDB.5
-rw------- 1 mongodb nogroup 2146435072 2011-05-18 17:45 searchDB.6
-rw------- 1 mongodb nogroup 2146435072 2011-05-16 01:45 searchDB.7
-rw------- 1 mongodb nogroup 2146435072 2011-05-17 13:45 searchDB.8
-rw------- 1 mongodb nogroup 2146435072 2011-05-23 16:45 searchDB.9
-rw------- 1 mongodb nogroup   16777216 2011-06-07 13:50 searchDB.ns
-rw------- 1 mongodb nogroup   67108864 2011-04-23 18:51 test.0
-rw------- 1 mongodb nogroup   16777216 2011-04-23 18:51 test.ns

根据"顶级"mongod使用29G虚拟内存(和780Mb RSS)

为什么我会有这样的异常值?我需要运行一些额外的功能吗.remove()函数从旧值中清除数据库?

推荐答案

对于mongod流程来说,Virtual memory size和居民规模似乎非常大.这是良性的:虚拟内存空间将刚好大于打开和映射的数据文件的大小;驻留大小将根据计算机上其他进程未使用的内存量而变化.

http://www.mongodb.org/display/DOCS/Caching

从MongoDB collection中删除对象时,它占用的空间不会自动被垃圾收集,新记录只会附加到数据文件的末尾,使它们越来越大.这就解释了一切:

http://www.mongodb.org/display/DOCS/Excessive+Disk+Space

首先,只需使用:

db.repairDatabase()

Mongodb相关问答推荐

无法从我的NextJS 14应用程序中的Redux工具包2.0中提取数据

MongoDB 投影按数组中的字符串长度排序

Golang中的Mongo中值运算

MongoDB查询优化

仅当特定字段存在于 MongoDB 中时才更新它

如何在 mongodb 中将一个方面的结果合并到一个有条件的列表中?

MongoDb $filter,然后获取非重复计数

分页时根据唯一字段mongodb获取数据

在数据中只有月份和年份的 mongodb 中字符串的日期时间

Mongodb聚合中基于其他字段值的多个条件的动态新字段值

MongoError:$subtract 累加​​器是一元运算符

在mongoose中添加多个验证

如果 mongoDB 服务器正在运行,如何从驱动程序判断

更新 mongoengine 中的嵌入文档列表

Node.js 和 MongoDB,重用 DB 对象

.NET 4 中是否有 mongodb C# 驱动程序支持 System.Dynamic.DynamicObject?

Mongoose 和新架构:返回ReferenceError: Schema is not defined

Mongoose 是否真的验证了对象 ID 的存在?

判断 mongoDB 是否连接

mongoose中的 Date.now() 和 Date.now 有什么区别?