2015-04-05 69 views
0

我正在第一次进入MEAN栈,我正在通过Mongoose处理数据库。我对Mongoose或MongoDB不是很熟悉,所以我不知道他们是如何配置的。我也不知道Mongoose是否很重要,或者这纯粹是一个MongoDB问题。MongoDB/Mongoose中连接的建议使用寿命是多少?

上次我直接编写数据访问逻辑(没有ORM或注入库来处理连接管理),它在.NET中使用System.Data.SqlClient。我记得一定要确保SqlConnection已经不再需要打开了,并且在我完成时总是明确地关闭它。

我读过很多关于编写平均应用程序的方法,没有人提到这一点。从我见过的代码中,我得到了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内部和配置的客观信息。在有大量并发请求的生产环境中执行此操作时是否会出现问题?

回答

1

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

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

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

谢谢!这是否意味着只能有5个同时连接?这对我的测试应用程序来说是足够的,但对于商业网站而言似乎很低。 – 2015-04-08 14:36:34

+0

@JustinMorgan您可以将'poolSize'值设置为您需要的任意数量的连接; 5只是默认值。 – JohnnyHK 2015-04-10 01:43:33