好吧,我是新手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})
}
}
}
}
然而,事情并没有像我预期的那样发展:
- 完成请求需要 45 分钟。
- 它在我的硬盘上创建了 16 GB 的数据。
- 它使用了我 80% 的 RAM(总共 8GB),并且在我重新启动 PC 之前它不会释放它们。
如下图所示,随着集合中文档数量的增加,插入文档的时间也在增加。我建议通过数据文件的最后修改时间:
这是预期的行为吗?我不认为 1 亿个简单的文档太多。
PS我现在真的很害怕运行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。