【问题标题】:MongoDB timeout issue (Node.js)MongoDB 超时问题 (Node.js)
【发布时间】:2016-08-22 19:47:07
【问题描述】:

我在 Node.JS 中有一个应用程序,它基本上每 30 分钟从 WebAPI 检索数据快照。 当我尝试使用聚合查询来查询数据库时,应用程序触发了与超时相关的错误(MongoError:连接 1 到 127.0.0.1:27017 超时)。从我的日志中,我看到正好是 30 秒。 聚合查询是这样的:

collection.aggregate([{
            "$group": {
                "_id": {
                    country: "$country",
                    user: "$user"
                }
            }
        }]).

我在不同的客户端(但相同的数据库)上测试了查询,25.000.000 条记录大约需要 60 秒。我的假设是有一个值为 30 秒的超时参数阻止我的应用程序完成查询。 有人可以告诉我如何在 Node.JS 中设置此参数吗?我正在使用 'mongodb' js 库,我的主机是 Windows。

由于这是一个个人项目,我想研究如何使用 MongoDB 而不是更传统的解决方案,例如 Oracle 或 MySQL,但这可能会破坏交易,因为分析是整个应用程序的核心部分。

【问题讨论】:

  • “应用程序触发了与超时相关的错误”听起来有点含糊。这个错误到底是什么样子的?它来自哪里?
  • 错误是这样的:MongoError: connection 1 to 127.0.0.1:27017 timed out

标签: node.js mongodb aggregation-framework


【解决方案1】:

我在这个答案中找到了解决方案:"Server x timed out" during MongoDB aggregation

基本上,连接字符串现在看起来像这样:

this.server = 'mongodb://127.0.0.1:27017/test?socketTimeoutMS=90000';

socketTimeoutMS 成功了,我不再收到连接超时错误。

【讨论】:

    【解决方案2】:

    在你的 mongo 连接中

    let options = {    
        server: {    
          auto_reconnect: true,    
          socketOptions: {
    
            keepAlive: 1,    
            connectTimeoutMS: 60000,    
            socketTimeoutMS: 60000,    
          }    
        },    
        replset: {    
          auto_reconnect: true,    
          socketOptions: {    
            keepAlive: 1,    
            connectTimeoutMS: 60000,    
           socketTimeoutMS: 60000,    
          }    
       }
    
      }
    
      Mongoose.connect(url, options);
    

    【讨论】:

    • 此方法现已弃用,当您使用它时,您现在拥有:the server/replset/mongos options are deprecated, all their options are supported at the top level of the options object
    猜你喜欢
    • 2015-11-01
    • 2016-01-29
    • 1970-01-01
    • 2012-08-18
    • 2023-03-03
    • 1970-01-01
    • 2013-09-12
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多