好吧,我是新来的 mongo
今天早上我有一个(坏)主意。我在 shell 中使用索引并决定创建一个包含许多文档(1 亿个)的大型集合。所以我执行了以下命令:
for (i = 1; i <= 100; i++) {
for (j = 100; j > 0; j--) {
for (k = 1; k <= 100; k++) {
for (l = 100; l > 0; l--) {
db.testIndexes.insert({a:i, b:j, c:k, d:l})
}
}
}
}
然而,事情并没有像我想象的那样发展:
如下图所示,随着集合中文档数量的增加,插入文档的时间也在增加。我建议通过数据文件的最后修改时间:
这是预期的行为吗?我不认为一亿简单 文件太多了。
附言我现在真的很害怕运行
ensureIndex
命令。编辑:
我执行了以下命令:
> db.testIndexes.stats()
{
"ns" : "test.testIndexes",
"count" : 100000000,
"size" : 7200000056,
"avgObjSize" : 72.00000056,
"storageSize" : 10830266336,
"numExtents" : 28,
"nindexes" : 1,
"lastExtentSize" : 2146426864,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 3248014112,
"indexSizes" : {
"_id_" : 3248014112
},
"ok" : 1
}
因此,
_id
上的默认索引有超过 3GB 的大小。
最佳答案
It took 45 minutes complete the request.
不惊讶。
It created 16 GB data on my hard disk.
正如@Abhishek 所说,一切似乎都很好,MongoDB 目前确实使用了相当数量的空间而没有压缩(希望稍后会出现)。
似乎数据大小约为 7.2GB 而平均对象大小为 72 字节,这似乎完美地工作(因为 72 字节适合 7.2GB) _id 索引的 3GB 开销似乎是 10GB 的存储大小很合身。
虽然我担心它使用的 6GB 比统计数据说的多,但这可能需要更多的调查。我猜这是因为 MongoDB 写入数据文件的方式,甚至可能是因为您没有使用非火灾并忘记写关注(
w>0
),总而言之;嗯。It used 80% of my RAM (8GB total) and it won't release them till I restarted my PC.
MongoDB 将尝试占用操作系统允许的尽可能多的 RAM。如果操作系统允许它占用 80%,那么它将占用 80%。这实际上是一个好兆头,它表明 MongoDB 具有正确的配置值来有效地存储您的工作集。
运行时
ensureIndex
mongod
永远不会释放 RAM。它只是没有 Hook ,相反,操作系统将缩小其分配的块以腾出更多空间(或者更确切地说)。
关于mongodb - 1亿份文件是不是太多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999897/