繁体   English   中英

MongoDB / Mongoose中的连接的建议使用寿命是多少?

[英]What is the recommended lifespan for a connection in MongoDB/Mongoose?

我第一次接触MEAN堆栈,并且正在通过Mongoose处理数据库。 我对Mongoose或MongoDB不太熟悉,所以我不知道他们喜欢如何配置。 我也真的不知道猫鼬是否重要,或者这纯粹是一个MongoDB问题。

我上一次直接编写数据访问逻辑(没有ORM或注入存储库来为我处理连接管理)时,是在.NET中使用System.Data.SqlClient 我记得必须始终确保打开SqlConnection时间不要超过必需的时间,并在完成后始终显式关闭它。

我已经阅读了很多有关编写M​​EAN应用程序的方法,但没人提到这一点。 从我看到的代码中,我得到的印象是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)

JavaScript翻译(如果需要)

这是调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM