mongodb连接超时错误

时间:2016-10-24 10:53:37

标签: javascript node.js mongodb nosql

我使用了mongodb数据库和node.js v12.0.10来连接和更新mongodb集合。 连接代码如下:

 async.parallel({
        RE5: function (cb) {
            MongoClient.connect(config.riskEngineDB, function (err, r5DB) {
                cb(err, r5DB);
            })
        },
        MDB: function (cb) {
            MongoClient.connect(config.monitoringDB, function (err, mDB) {
                cb(err, mDB);
            })
        }
    },
    function (err, DBs) {
        assert.equal(null, err);
        console.log("Connected correctly to Dbs");
        // ..doing updates..

 })

运行一段时间后,脚本打印出以下错误:

  { [MongoError: connection 39 to 127.0.0.1:27017 timed out]
  name: 'MongoError',
  message: 'connection 39 to 127.0.0.1:27017 timed out' }

为了您的信息,我使用了mongodb的不同连接选项,但它没有意义。

2 个答案:

答案 0 :(得分:7)

我有类似的经历,因为查询花了太多时间回复

节点mongo驱动程序中有2个可配置的超时:

connectTimeoutMSsocketTimeoutMS,默认为30秒(http://mongodb.github.io/node-mongodb-native/2.2/reference/connecting/connection-settings/

如果您的查询需要超过30秒才能发送第一个结果,那么它将以连接超时错误结束。

如果您的查询在两个结果之间的间隔超过30秒,那么由于池缩小,它可能会因该连接关闭而结束。

您可能希望增加超时,或确保查询足够快(例如创建索引)。我建议加快查询速度,因为增加超时可能会有性能下降。

答案 1 :(得分:0)

我想提供此答案,因为它是针对免费的在线mongodb大学的mongodb考试问题。它很详尽,并提供了文档。

我已经弄清楚了,并将消除一些主要由课程中缺乏解释引起的混乱。我并不是很批评,但是需要进一步解释才能正确回答这个问题。

首先,通过应用程序连接到mongodb时,将使用驱动程序。该驱动程序具有必须通过的屏障,才能对mongodb服务器执行任何操作。当您理解了这种障碍的概念时,您就会理解这个问题。

为了使所有事物通过障碍,并最终进行写或读操作,最终必须建立所有事物的连接。

从视觉上您可以这样想:

  

IO /发生写入请求==> || 第一个障碍->(服务器选择-(err-> serverSelectionTimeoutMS ))==> || 第二个障碍->与服务器的连接-(err-> 'connectionTimeoutMS')==> || 第3 屏障->套接字连接-(err-> 'socketTimeoutMS')== ****写关注选项屏障** ==> || 第四个障碍-> 'write concern specification { w: <value>, j: <boolean>, wtimeout: <number> }' ==> || 第5个障碍->成功的读/写操作

*****注意**:根据您的逻辑,在此流水线上的任何地方都会发生故障,因此可能不会成功进行写入/读取操作。

我们可以将障碍1-3视为连通性的网络障碍。如果网络出现故障或出现问题,那么人们会通过超时和这些超时的异常处理来注意到这些问题。必须了解的是,如果您不能首先连接到服务器,就无法执行写操作。本课可以说明这些观点。

写或读操作的第一道障碍是建立与服务器的连接...以上由第1-3条显示。

然后,在通过集群和/或集群的副本集建立服务器连接之后,可以定义写关注点。

建立连接后,由于网络连接以外的其他原因可能不会发生写入。这些可能是数据冲突或由于DDOS或黑客入侵而导致的写入分配过多,或者通常是服务器空间不足,无法将数据写入服务器。关键是,其他一些事情可能引起对写关注的反应,并因此通过选项处理写关注错误。

我希望这会有所帮助,因为它使我理解了相应的问题和正确的答案。大多数情况下,我们并没有真正做到这一点,所以我希望这可以帮助其他人学习和理解此反馈循环。

我阅读了一些文章以帮助我获得这个答案/结论。如果有人对我的解释有所改善或改进,请随时提供反馈。

https://scalegrid.io/blog/understanding-mongodb-client-timeout-options/

https://scalegrid.io/blog/mongodb-write-concern-3-must-know-caveats/

https://docs.mongodb.com/manual/reference/write-concern/

https://www.mongodb.com/blog/post/server-selection-next-generation-mongodb-drivers