【问题标题】:Is it 100 million documents too much?1 亿份文件是不是太多了?
【发布时间】:2013-06-04 16:38:03
【问题描述】:

好吧,我是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})
            }
        }
    }
}

然而,事情并没有像我预期的那样发展:

  1. 完成请求需要 45 分钟。
  2. 它在我的硬盘上创建了 16 GB 的数据。
  3. 它使用了我 80% 的 RAM(总共 8GB),并且在我重新启动我的电脑之前它不会释放它们。

如下图所示,随着集合中文档数量的增加,插入文档的时间也在增加。我建议到数据文件的最后修改时间:

这是预期的行为吗?我不认为 1 亿个简单文档太多了。

附:我现在真的很害怕运行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。

【问题讨论】:

    标签: mongodb mongo-shell


    【解决方案1】:

    这是一种预期行为,mongo db 文件以文件大小 16MB ( test.0 ) 开始,然后增长到 2GB,然后 2GB 是恒定的。

    1 亿 (16 GB) 文档一无所有。 您可以运行 ensureIndex,它应该不会花费太多时间。

    你不需要重启你的电脑,当其他进程需要内存时,mongod 会释放内存。

    仅供参考:test.12 完全为空。

    我猜你不担心 16GB 的大小只是为了 1 亿个文档?

    【讨论】:

      【解决方案2】:

      完成请求需要 45 分钟。

      并不惊讶。

      它在我的硬盘上创建了 16 GB 的数据。

      正如@Abhishek 所说,一切似乎都很好,MongoDB 目前确实使用了相当多的空间而没有压缩(希望稍后会出现)。

      似乎数据大小约为 7.2GB,而平均对象大小为 72 字节,这似乎工作得很好(因为 72 字节适合 7.2GB)与 _id 索引的 3GB 开销似乎存储10GB 的大小非常合适。

      虽然我担心它使用的 6GB 比统计数据显示的需要多,但这可能需要更多调查。我猜这是因为 MongoDB 如何写入数据文件,甚至可能是因为您没有使用非火灾并忘记写入问题 (w&gt;0),总而言之;嗯。

      它使用了我 80% 的 RAM(总共 8GB),并且在我重新启动 PC 之前它不会释放它们。

      MongoDB 将尝试占用操作系统允许的尽可能多的 RAM。如果操作系统让它占用 80%,那么它将占用 80%。这实际上是一个好兆头,它表明 MongoDB 具有正确的配置值来有效地存储您的工作集。

      当运行ensureIndex mongod 永远不会释放内存。它根本没有钩子,相反,操作系统将缩小其分配的块以腾出更多空间(或者应该)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多