解析服务器 + mongoDB - 服务器过载高

Parse-server + mongoDB - high server overload

我们在自己的服务器上使用 parse-server + mongoDB 作为手游后端。大约有 200K 用户同时连接约 2k。 “_Session”集合大约有 100 万条记录,并且还在继续增长。

每个服务器的 CPU 持续加载 100%。 在 MongoDB 日志中,我可以看到 95% 的记录如下:

2017-05-11T16:25:24.738+0300 I COMMAND [conn1] command appdb1._Session command: find { find: "_Session", filter: { _session_token: "r:9eaba843dc3f8b482dbc76009f94c18a" }, sort: {}, projection: {}, limit: 1 } planSummary: COLLSCAN keysExamined:0 docsExamined:1015131 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:7930 nreturned:1 resle n:428 locks:{ Global: { acquireCount: { r: 15862 } }, Database: { acquireCount: { r: 7931 } }, Collection: { acquireCount: { r: 7931 } } } protocol:op_query 556ms

我已经为 _Session 集合创建了索引, db.getCollection("_Session").getIndexes() [

{
    "v" : 1,
    "key" : {
        "_id" : 1
    },
    "name" : "_id_",
    "ns" : "appdb1._Session"
},
{
    "v" : 1,
    "key" : {
        "sessionToken" : 1
    },
    "name" : "sessionToken_1",
    "ns" : "appdb1._Session",
    "background" : true
}

]

但是据我了解,并没有用到,DB每次查找记录的时候都会进行全集合扫描

所以服务器响应很慢,请帮忙解决这个问题。

谢谢!

尝试在后台对键 _session_token 创建索引:

db.yourCollection.ensureIndex({ "_session_token":1}, {background:true})

这将避免对具有键 _session_token 的查询进行集合扫描。