【问题标题】:Should I close a Mongoose connection after every model save?我应该在每个模型保存后关闭 Mongoose 连接吗?
【发布时间】:2020-08-19 09:37:50
【问题描述】:

我正在使用 Mongoose 来管理我的数据库架构。我将模型保存在应用程序的几个位置。我想知道是否应该分别在每个查询之前和之后手动关闭和重新打开连接?我不确定性能影响。

例如在这个createUser() 中,数据库连接到,保存模型,然后关闭连接。每次调用 createUser() 时都会发生这种情况。

function createUser() {
    mongoose.connect(process.env.DB_PATH, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    })
    const db = mongoose.connection
    db.once("open", function () {
        const userSchema = new mongoose.Schema({
            name: String,
        })
        const UserModel = mongoose.model("User", userSchema)
        const user = new UserModel({
            name: "John",
        })
        user.save().then(() => {
            mongoose.connection.close()
        })
    })
}

或者在应用程序的入口点保持连接处于活动状态并在应用程序终止时关闭它是一个更好的主意?

// server.js

mongoose.connect(process.env.DB_PATH, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
})

// ...

process.on('SIGINT', () => {
    mongoose.connection.close(() => {
          process.exit(0);
      });
});

我也很想知道,如果使用另一个数据库驱动程序,比如 MySQL,策略会改变吗?

【问题讨论】:

  • 如果您在项目中的每一个地方都需要连接,请保持连接!
  • 制作你的连接模块并在你的项目的入口点连接它
  • 谢谢@mohsen - 是不是因为多次连接和断开连接太昂贵了?保持连接是否存在任何性能问题?

标签: node.js mongodb express mongoose


【解决方案1】:

根据本书Mongoose For Application Development

一般的最佳做法是在应用程序启动时打开您的连接,并保持打开状态。但是,有时您会想要关闭连接。例如,如果您的应用程序正在关闭或重新启动,则需要手动关闭数据库连接,或者您正在运行单次命中脚本而不是持久性应用程序。

最好阅读mongoosejs 文档中的选项部分,了解您可以在连接字符串中设置的一些选项。

并检查best practice to connect to db

根据猫鼬文档:

autoReconnect - 底层 MongoDB 驱动程序将在失去与 MongoDB 的连接时自动尝试重新连接。除非你是一个非常高级的用户,想要管理自己的连接池

据我所知,此类问题取决于您的项目规模。
阅读所有参考资料后,您将为您的项目提供商品。

【讨论】:

  • 谢谢你的回答,太有趣了!
猜你喜欢
  • 2019-03-25
  • 2017-11-05
  • 1970-01-01
  • 2018-07-02
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多