【问题标题】:Why does the first connection/request to MongoDB Atlas database taking so long?为什么第一次连接/请求到 MongoDB Atlas 数据库需要这么长时间?
【发布时间】:2020-11-21 10:07:17
【问题描述】:

我使用 React、Nodejs 和 Mongodb 作为数据库创建了一个 webapp。我现在正在使用免费的 MongoDB Atlas 数据库,所以我在那里创建了一个帐户和一个数据库,然后我将它与我的节点/快速服务器连接。

我的应用程序运行良好,我能够注册/登录用户并获取数据等。但是,第一个请求总是需要很长时间才能完成。我现在在 Heroku 上免费部署了该应用程序。当我打开应用程序并尝试登录时,第一个请求大约需要 20 秒才能完成并登录用户。在那之后,一切都运行得又快又好,所以这真的只是第一次开始。

由于我的应用程序正在运行,我不知道这里有什么问题。我唯一的猜测是这个问题特定于 MongoDB Atlas 及其免费数据库。

这是我用来连接数据库的代码,非常简单:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;


mongoose.connect(MONGODB_HOST, {
  useNewUrlParser: true, 
  useUnifiedTopology: true, 
  useFindAndModify: true,
  useCreateIndex: true });

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));

【问题讨论】:

  • 你能分享替换用户、密码和集群 ID 的连接字符串吗?应该看起来像mongodb+srv://user:pass@clusterID.mongodb.net/?options。根据我的经验,它可能需要 1 或 2 秒,除非有什么叮当声
  • @Minsky 是的。这是我的连接字符串的样子:“mongodb+srv://user:pass@clusterID.mongodb.net/dbname?retryWrites=true&w=majority”
  • @Minsky 创建数据库时,我只是从 mongoDB Atlas 网站复制粘贴了这个
  • 尝试在选项中添加family:4
  • @Minsky 感谢您的建议,但没有奏效。第一个请求仍然需要约 30 秒。令人困惑的是,它在第​​一次请求之后运行得非常快。每次都像是一个奇怪的冷启动。感觉长时间不使用mongodb atlas的连接消失了!

标签: node.js mongodb express mongodb-atlas mongodb-atlas-search


【解决方案1】:

Heroku 和 Atlas 都会在不使用时暂停免费层应用程序/集群。

如果您在使用之间有很大的差距,您要么需要忍受它,要么设置一个定期任务来定期戳应用程序以使其保持运行。

对于 Heroku,请参阅:

完成后,通过 pinger 调用的操作对数据库执行某些操作以保持 Atlas 运行。

【讨论】:

  • 我明白了。谢谢,有道理
猜你喜欢
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多