首页 > 解决方案 > MongoDB Atlas Nodejs 脚本 - 在新加坡连接集群大约需要 2 到 3 秒

问题描述

我正在使用以下代码段连接到 mongo,每个新连接大约需要 2 到 3 秒才能打开。只是想知道这是 MongoDB Atlas 的默认行为,还是我做错了什么。

    const MongoClient = require('mongodb').MongoClient;
    const uri = "mongodb+srv://<user>:<password>@<atlasUri>/test?retryWrites=true&w=majority";
    console.time('connectionTime');
    const client = new MongoClient(uri, { useNewUrlParser: true });
    client.connect(err => {
      console.timeEnd('connectionTime');
      const collection = client.db("test").collection("devices");
      // perform actions on the collection object
      client.close();
    });

我的代码在 AWS Lambda 函数中运行,我试图避免执行https://docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/context.callbackWaitsForEmptyEventLoop = false;中的建议。我更喜欢在请求完成后关闭连接。

标签: node.jsmongodbaws-lambdamongodb-atlas

解决方案


2-3 秒是相当合理的:mongo 需要一些时间来建立连接。根据您链接的文档:

首次调用 Lambda 函数并且您的 AWS Lambda 函数中的 MongoDB 客户端连接到 MongoDB 时,初始启动成本大约为 5 到 10 秒。连接到分片集群的 mongos 比连接到副本集更快。在 Lambda 函数的生命周期内,后续连接将明显更快。

我用节点客户端连接到本地运行的 mongo 需要 1.5 秒,连接到 atlas 沙箱实例需要 2 秒。


推荐阅读