mongodb - 1亿份文件是不是太多了?

标签 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})
            }
        }
    }
}

然而,事情并没有像我想象的那样发展:
  • 完成请求花了 45 分钟。
  • 它在我的硬盘上创建了 16 GB 的数据。
  • 它使用了我 80% 的 RAM(总共 8GB)并且在我重新启动 PC 之前不会释放它们。

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

    enter image description here

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

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

    相关文章:

    mongodb 初始加载 - 即时构建 DBRef

    mongodb - 如何更改 mongoshell 提示符?

    mongodb - 如何使用 Sharding 查看 Mongodb 中的 Oplog

    mongodb - 使用 mongo shell 更改 mongodb 中的文档结构

    mysql - 为什么 mongoDB 的 Select 时间比 Fetch 时间少?

    javascript - 使用 nextjs 在同一页面上链接页面

    mongodb - 在 Windows 上仅安装 Mongo Client/Shell - 不安装 MongoDB

    javascript - 填充对象 Mongoose 的嵌套数组

    mongodb - hadoop mongodb 连接器 - 输出数据不是 mongodb 而是 hdfs

    ios - 如何将 iOS Swift 应用程序指向 Amazon Web Services 上的 Parse Server?