MongoDB超时问题(Node.js)



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

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

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

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

我在这个答案中找到了一个解决方案:"服务器x超时"

基本上,连接字符串现在看起来像这样:
this.server = 'mongodb://127.0.0.1:27017/test?socketTimeoutMS=90000';

socketTimeoutMS做到了这一点,我不再得到连接超时错误。

在你的mongo connect

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);

看起来正确的选项(如果您正在使用MongoClient)是使用serverSelectionTimeoutMS代替。你可以这样做:

const client = new MongoClient(mongoUrl, {
  serverSelectionTimeoutMS: 1000, useUnifiedTopology: true
})

我还没有测试过,但是你可以在这里找到更多的细节。你也可以在connectTimeoutMSmaxTimeMS上找到一些运气。

相关内容

  • 没有找到相关文章

最新更新