【问题标题】:What is the recommended lifespan for a connection in MongoDB/Mongoose?MongoDB/Mongoose 中连接的推荐寿命是多少?
【发布时间】:2015-06-09 19:05:17
【问题描述】:

我第一次接触 MEAN 堆栈,我正在通过 Mongoose 处理数据库。我对 Mongoose 或 MongoDB 不是很熟悉,所以我不知道他们喜欢如何配置。我也不知道 Mongoose 是否重要,或者这纯粹是一个 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)

JavaScript translation if you need it

这是唯一调用mongoose.connect 的地方,并且生成的连接对象在整个应用程序中被重用。我这样做是对的,还是应该在每个请求上创建、打开、关闭和销毁它?我还需要注意哪些其他可扩展性问题?

我意识到这听起来有点开放,但我希望获得有关 MongoDB 和 Mongoose 内部结构和配置的客观信息。当我在具有大量并发请求的生产环境中执行此操作时会出现问题吗?

【问题讨论】:

    标签: node.js mongodb coffeescript mongoose database-connection


    【解决方案1】:

    您在调用 mongoose.connect 时创建的不是单个连接,而是一个连接池,旨在为您的应用程序的生命周期而存在,并通过您注册的 Mongoose 模型由所有代码共享。

    所以你已经在做正确的事情了,如果你想改变连接池的默认大小(5),你可以通过mongoose.connect的options参数来做到这一点:

    // Use a pool of 3 connections.
    mongoose.connect(process.env.MONGO_URI, { server: { poolSize: 3 }});
    

    【讨论】:

    • 谢谢!这是否意味着只能有 5 个同时连接?这对于我的测试应用程序来说已经足够了,但对于商业网站来说似乎很低。
    • @JustinMorgan 您可以将poolSize 值设置为您需要的任意数量的连接; 5 只是默认值。
    猜你喜欢
    • 2023-04-01
    • 2013-06-27
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多