首页 > 解决方案 > MongoDB 在获取大量文档时性能下降

问题描述

所以我已经在这个问题上待了一个星期,但我无法解决它。对大量文档的查询太慢了。

我正在运行一个超级基本的查找查询,然后是 a .toArray(),然后将其发送到我们的前端。

const orders = await db.collection('Orders').find({ organization: new ObjectId('5fa28c7ad882490116f8761e') }).toArray()

查询本身需要 25 毫秒,在下面的executionStats中可以看到,但在检索数据之前需要 4.5 秒。

几百个文档按预期工作,最多需要几百毫秒。但是超过 500 个文档它很快就会变慢,现在我在 4.5 秒内获取约 25k 个文档。这甚至不是最终的查询。我将在此之上运行几个步骤的聚合,但这似乎是主要问题,它不能与硬件相关。我尝试将数据库升级到 M60 而不是下面提到的 M30,几乎没有区别,而且对于我们公司的规模来说太贵了。

我能做些什么?MongoDB 是否只能返回几百个文档?


以下是一些统计数据:

{
    "ns" : "[db].Orders",
    "size" : 207216190,
    "count" : 467771,
    "avgObjSize" : 442,
    "storageSize" : 59006976,
    "freeStorageSize" : 12288,
    "capped" : false,
    "wiredTiger" : {
        "metadata" : {
            "formatVersion" : 1
        }
    }

}
{
    "executionSuccess": true,
    "nReturned": 26385,
    "executionTimeMillis": 25,
    "totalKeysExamined": 26385,
    "totalDocsExamined": 26385,
    "executionStages": {
        "stage": "FETCH",
        "nReturned": 26385,
        "executionTimeMillisEstimate": 3,
        "works": 26386,
        "advanced": 26385,
        "needTime": 0,
        "needYield": 0,
        "saveState": 26,
        "restoreState": 26,
        "isEOF": 1,
        "docsExamined": 26385,
        "alreadyHasObj": 0,
        "inputStage": {
            "stage": "IXSCAN",
            "nReturned": 26385,
            "executionTimeMillisEstimate": 2,
            "works": 26386,
            "advanced": 26385,
            "needTime": 0,
            "needYield": 0,
            "saveState": 26,
            "restoreState": 26,
            "isEOF": 1,
            "keyPattern": {
                "organization": 1,
                "state.removed": 1
            },
            "indexName": "organization_1_state.removed_1",
            "isMultiKey": false,
            "multiKeyPaths": {
                "organization": [],
                "state.removed": []
            },
            "isUnique": false,
            "isSparse": false,
            "isPartial": false,
            "indexVersion": 2,
            "direction": "forward",
            "indexBounds": {
                "organization": [
                    "[ObjectId('5fa28c7ad882490116f8761e'), ObjectId('5fa28c7ad882490116f8761e')]"
                ],
                "state.removed": [
                    "[MinKey, MaxKey]"
                ]
            },
            "keysExamined": 26385,
            "seeks": 1,
            "dupsTested": 0,
            "dupsDropped": 0
        }
    }
}

标签: node.jsmongodb

解决方案


推荐阅读