我正在使用Mongoose来管理我的DB模式。我在我的应用程序中的几个地方保存我的模型。不过我想知道,我是否应该在每次查询之前和之后分别手动关闭和重新打开连接?我不确定对性能的影响。
例如,在这个 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);
});
});
我也很想知道,如果使用另一个DB驱动,比如说MySQL,策略是否会改变?
根据这本书 应用程序开发的Mongoose
一般来说,最好的做法是在应用程序启动时打开连接,并保持其打开。然而,有些时候你会想要关闭连接。例如,如果你的应用程序正在关闭或重新启动,数据库连接需要手动关闭,或者如果你正在运行一个单次点击的脚本而不是一个持久的应用程序。
阅读以下内容是很好的 选项 参与 mongoosejs 文档中关于你可以在连接字符串中设置的一些选项。
并检查 连接数据库的最佳做法 也。
根据mongoose文档。
autoReconnect - 底层MongoDB驱动会在失去与MongoDB的连接时自动尝试重新连接。除非你是一个极其高级的用户,想要管理自己的连接池。
据我所知,这种问题取决于你的项目规模。在阅读了所有的参考资料后,你将会得出适合你项目的产品。