Arm*_*yan 13 javascript mongodb nosql node.js
我使用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..
})
Run Code Online (Sandbox Code Playgroud)
运行一段时间后,脚本打印出以下错误:
{ [MongoError: connection 39 to 127.0.0.1:27017 timed out]
name: 'MongoError',
message: 'connection 39 to 127.0.0.1:27017 timed out' }
Run Code Online (Sandbox Code Playgroud)
为了您的信息,我使用了mongodb的不同连接选项,但它没有意义.
Chr*_*hew 16
我想提供这个答案,因为它出现在免费在线 mongodb 大学的 mongodb 考试问题中。它是彻底的,并提供了文档。
我已经想通了,并将清理一些主要是由于课程中缺乏解释而引起的混乱。我不是挑剔的,但需要进一步解释才能正确回答这个问题。
首先,当通过应用程序连接到 mongodb 时,您将使用驱动程序。该驱动程序必须通过障碍才能对 mongodb 服务器执行任何操作。当你理解了这个障碍的概念时,你就会理解这个问题。
为了通过障碍并最终进行写入或读取操作,最终形成一系列事物的每个连接都必须发生。
视觉上你可以这样想:
IO/写请求发生 ==> || 第一个障碍 --> (服务器选择 - (err -> ) ) ==> || 第二个障碍 --> 连接到服务器 - (err -> 'connectionTimeoutMS' ) ==> || 第三个障碍 --> 套接字连接 - (err -> 'socketTimeoutMS' ) ==****Write Concern Options Barriers**==> || 第四个障碍 --> '写关注规范 { w: <value>, j: <boolean>, wtimeout: <number> }' ==> || 第 5 个障碍 --> 成功的写/读操作
serverSelectionTimeoutMS
*****注意**:根据您的逻辑,此管道的任何地方都会发生故障,可能不会发生成功的写入/读取操作。
我们可以将障碍 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
我有类似的经历,因为查询花了太多时间来回复
在节点mongo驱动程序中有2个可配置的超时:
connectTimeoutMS并且socketTimeoutMS,默认为30秒(http://mongodb.github.io/node-mongodb-native/2.2/reference/connecting/connection-settings/)
如果您的查询需要超过30秒才能发送其第一个结果,那么它将以连接超时错误结束.
如果你的查询在两个结果之间花费超过30秒,那么由于池缩小,它可能会以该连接关闭结束.
您可能希望增加超时,或确保查询足够快(例如创建索引).我建议加快查询,因为增加超时可能会有性能下降.
| 归档时间: |
|
| 查看次数: |
25415 次 |
| 最近记录: |