首先,我在了解从服务器建立数据库连接的性能成本方面相当新,所以如果我说出一些我可能没有的意思,请原谅。
我目前正在为node.js开一个mongodb类,我真的着迷于他们最初提供的博客服务器的代码是多么简单和优雅(我们主要只是对数据库实现查询)。它看起来像这样:
var express = require('express')
, app = express()
, cons = require('consolidate')
, MongoClient = require('mongodb').MongoClient
, routes = require('./routes');
MongoClient.connect('mongodb://localhost:27017/blog', function(err, db) {
if(err) throw err;
app.set('views', __dirname + '/views');
app.use(express.cookieParser());
app.use(express.bodyParser());
routes(app, db);
app.listen(3000);
console.log('Express server listening on port 3000'); });
如您所见,它在服务器配置为执行任何操作之前建立数据库连接。可以将这种模式用于生产吗?它似乎是模块化的,因为db传递给index.js,它处理所有路由。
我之前一直在做的是在查询数据库并关闭它的每个请求(使用pg模块)上建立连接。我其实不确定这是不是一个好主意。但我想要一些确认,我上面描述的这种模式是可以的;如果没有,也许提供一个替代方案并解释原因(mongodb的替代结构/模式和/或pg 不是像猫鼬这样的替代模块)。
谢谢!
答案 0 :(得分:1)
你做得很好。 node-postgres使用集合池,这意味着您可以打开一次连接并重用它。对于许多应用程序,池化数据库连接是首选,因为它比为每个请求打开和关闭它们更有效。但是,如果由于某种原因存在长期存在的数据库连接,则可能不希望池数据库连接,因为存在耗尽数据库池的风险。根据{{3}},池中的默认连接数为10,但您可以通过将数字设置为0来关闭连接池。