0

首先,在了解从服务器建立数据库连接的性能成本方面,我还很陌生,所以如果我说了一些我可能不是故意的话,请原谅。

我目前正在为 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不是像猫鼬这样的替代模块)。

谢谢!

4

1 回答 1

1

你在做什么很好。node-postgres 使用集合池,这意味着您可以打开一次连接并重用它。对于许多应用程序,将数据库连接池化是首选,因为它比为每个请求打开和关闭它们更有效。但是,如果由于某种原因您拥有长期存在的数据库连接,那么您可能不想池化数据库连接,因为您冒着耗尽数据库池的风险。根据源码,池中的默认连接数是10,但是你可以通过将连接池设置为0来关闭连接池。

于 2013-11-06T01:00:47.783 回答