[英]What is the recommended lifespan for a connection in MongoDB/Mongoose?
我第一次接触MEAN堆栈,并且正在通过Mongoose处理数据库。 我对Mongoose或MongoDB不太熟悉,所以我不知道他们喜欢如何配置。 我也真的不知道猫鼬是否重要,或者这纯粹是一个MongoDB问题。
我上一次直接编写数据访问逻辑(没有ORM或注入存储库来为我处理连接管理)时,是在.NET中使用System.Data.SqlClient
。 我记得必须始终确保打开SqlConnection
时间不要超过必需的时间,并在完成后始终显式关闭它。
我已经阅读了很多有关编写MEAN应用程序的方法,但没人提到这一点。 从我看到的代码中,我得到的印象是MongoDB / Mongoose连接喜欢生活在应用程序级别,并且我应该只为整个应用程序调用一次mongoose.connect
。
这是我的连接代码,在应用程序启动时被调用一次:
mongoose = require "mongoose"
connection = mongoose.connection
mongoose.connect process.env.MONGO_URI
connection.on 'error', (err) ->
console.error 'DB connection error', err
.once 'open', ->
console.log 'DB open'
gracefulExit = ->
connection.close ->
console.log 'Mongoose default connection disconnected through app termination'
process.exit 0
process.on('SIGINT', gracefulExit)
.on('SIGTERM', gracefulExit)
module.exports = (name, dataStructure) ->
schema = new Schema dataStructure
return mongoose.model(name, schema)
这是调用mongoose.connect
的唯一位置,并且生成的连接对象将在整个应用程序中重复使用。 我这样做是否正确,还是应该在每次请求时创建,打开,关闭和销毁它? 我还需要注意其他哪些可伸缩性问题?
我意识到这听起来有些开放,但是我希望获得有关MongoDB以及Mongoose内部和配置的客观信息。 在具有大量并发请求的生产环境中执行此操作时会出现问题吗?
调用mongoose.connect
时创建的内容不是单个连接,而是一个连接池,该连接池在应用程序的生命周期内一直存在,并通过注册的Mongoose模型被所有代码共享。
因此,您已经可以正确执行操作,并且如果您想更改连接池的默认大小(5),可以通过mongoose.connect
的options参数来实现:
// Use a pool of 3 connections.
mongoose.connect(process.env.MONGO_URI, { server: { poolSize: 3 }});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.