Mongodb:似乎不尊重上限大小限制

时间:2014-12-21 08:00:57

标签: mongodb

在win2012上运行mongodb

Mongo db version v2.6.4

我们的收藏是用这个参数创建的:

上限:true,大小:500000000000 // 500 gb

但是数据目录,只保留了这一个集合,已经增长到720gb。

此mongo服务器上根本没有使用复制。

如何将数据目录保持在~500 gb?

此db有时会获得大量插入,但我们还需要控制最大大小(并让它丢弃旧数据)。

上限大小是否可能不包含索引?

或者我应该考虑其他开销吗? (怎么样?

或者

db stats

> db.stats
function (scale){
    return this.runCommand( { dbstats : 1 , scale : scale } );
}
> db.stats()
{
        "db" : "logging",
        "collections" : 3,
        "objects" : 289637086,
        "avgObjSize" : 2076.3166847770317,
        "dataSize" : 601378314192,
        "storageSize" : 606012620432,
        "numExtents" : 305,
        "indexes" : 12,
        "indexSize" : 147827443456,
        "fileSize" : 776943435776,
        "nsSizeMB" : 16,
        "dataFileVersion" : {
                "major" : 4,
                "minor" : 5
        },
        "extentFreeList" : {
                "num" : 0,
                "totalSize" : 0
        },
        "ok" : 1
}
>

我们用来创建集合的命令:

db.createCollection(“LogItem”,{capped:true,size:500000000000})

因此我们写入的集合是使用上限cmd创建的。这就是所有空间的地方

我不能做db.collection.stats(),因为磁盘空间不足......

谢谢!

2 个答案:

答案 0 :(得分:1)

我相信你把多个不同的概念合二为一。 " capped"的概念适用于个人集合 - 驻留在数据库中。数据库是磁盘上由1个或多个集合组成的文件。每个数据库文件都有数据加上一些增长的空间加上一些来自已删除数据的漏洞等。 上限集合没有索引 - 所以对于检索,如果你真的想要创建一个500GB的集合,性能将是可怕的。 为了进行测试,您可以制作一个大小为1mb的上限集合,用数据填充它,并验证一旦达到一定数量的文档,它就不会增长 - 但这并不意味着包含此集合的数据库不会超过所需的大小 - 会有一些开销。

答案 1 :(得分:1)

分辨

这个问题?好吧,您可以创建一个集合作为上限,并且可以工作......但是在创建新数据库时,如果传入连接正在发送数据,则在您有机会将其创建为上限之前,将自动创建新数据库,并且你最终得到了......一个没有上限的集合。

解决方案:

当mongo脱机时,请暂时将其重新启动,并将配置设置为非标准端口。创建集合。然后在正常端口重启mongo,一切都很好。