MongoDB慢速查询

时间:2014-10-08 04:10:17

标签: mongodb mongodb-query

我正在运行mongoDB查询并且花了太长时间。我正在查询集合" play_sessions"对于9个用户的数据,如(1)所示。我的文档包含用户游戏会话的数据,如图所示(2)。我有一个索引" user_id"正在使用此索引,如(3)中的.explain()输出所示。 .stats()输出中的索引显示在(4)中。

mongoDB版本是2.6.1。在" play_sessions"中有大约400万人参加。和43,000个不同的用户。

此示例查询大约需要2分钟,800个用户的实际查询需要更长时间。我想知道为什么这个查询很慢,我可以做些什么来加快速度。

(1)查询:

db.play_sessions.find({user_id: {$in: users}}, {play_data:-1}

(2)示例文件:

{
    "_id" : 1903200,
    "score" : 1,
    "user_id" : 60538,
    "time" : ISODate("2014-02-12T03:49:59.919Z"),
    "level" : 1,
    "user_attempt_no" : 2,
    "game_id" : 181,
    "play_data" : [
       **Some JSON in here**
    ],
    "time_sec" : 7.989
}

(3).explain()输出

{
    "cursor" : "BtreeCursor user_id_1",
    "isMultiKey" : false,
    "n" : 13724,
    "nscannedObjects" : 13724,
    "nscanned" : 13732,
    "nscannedObjectsAllPlans" : 14128,
    "nscannedAllPlans" : 14140,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 4463,
    "nChunkSkips" : 0,
    "millis" : 123631,
    "indexBounds" : {
        "user_id" : [
            [
                41930,
                41930
            ], 
             ...,
            [
                67112,
                67112
            ]
        ]
    },
    "server" : "...",
    "filterSet" : false
}

(4).stats()集合的输出:

{
    "ns" : "XXX.play_sessions",
    "count" : 3957328,
    "size" : 318453446112,
    "avgObjSize" : 80471,
    "storageSize" : 319917328096,
    "numExtents" : 169,
    "nindexes" : 10,
    "lastExtentSize" : 2146426864,
    "paddingFactor" : 1,
    "systemFlags" : 1,
    "userFlags" : 1,
    "totalIndexSize" : 1962280880,
    "indexSizes" : {
        "_id_" : 184205280,
        "game_id_1" : 167681584,
        "user_id_1" : 113997968,
        "user_id_1_game_id_1_level_1_time_1" : 288972544,
        "game_id_1_level_1" : 141027824,
        "game_id_1_level_1_user_id_1_time_1" : 301645344,
        "user_id_1_game_id_1_level_1" : 228674544,
        "game_id_1_level_1_user_id_1" : 245549808,
        "user_id_1_user_attempt_no_1" : 135958704,
        "user_id_1_time_1" : 154567280
    },
    "ok" : 1
}

0 个答案:

没有答案