cha*_*sos 9 mongodb mongo-shell
好吧,我是新手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})
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,事情并没有像我预期的那样:
正如您在下面的照片中看到的那样,随着集合中文档的数量不断增加,文档插入的时间也在增长.我建议通过数据文件的最后修改时间:

这是预期的行为吗?我不认为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
}
Run Code Online (Sandbox Code Playgroud)
因此,默认索引_id大小超过3GB.
完成请求花了 45 分钟。
并不感到惊讶。
它在我的硬盘上创建了 16 GB 数据。
正如 @Abhishek 所说,一切看起来都很好,MongoDB 目前确实使用了大量没有压缩的空间(希望稍后会出现)。
看起来数据大小约为 7.2GB,而平均对象大小为 72 字节,这似乎工作得很好(因为 72 字节适合 7.2GB),_id 索引的 3GB 开销似乎是 10GB 的存储大小很合适。
虽然我担心它使用的 6GB 比统计数据所需要的多,但这可能需要更多的调查。我猜测这是因为 MongoDB 如何写入数据文件,甚至可能是因为您没有使用非即发即忘写入关注点 ( w>0),总而言之;嗯。
它使用了我 80% 的 RAM(总共 8GB),并且在我重新启动电脑之前不会释放它们。
MongoDB 将尝试占用操作系统允许的尽可能多的 RAM。如果操作系统允许它占用 80%,那么它就会占用 80%。这实际上是一个好兆头,它表明 MongoDB 具有正确的配置值来有效地存储您的工作集。
运行时ensureIndex mongod永远不会释放RAM。它根本没有任何钩子,相反,操作系统将缩小其分配的块以为更多空间腾出空间(或者应该)。
| 归档时间: |
|
| 查看次数: |
8934 次 |
| 最近记录: |