这是对我来说有些不清楚的事情(我刚开始接触Node和Mongo),因为服务器性能和压力问题,这让我真正担心(我猜这又是另一个问题,但我会在文章结尾回答)。
所以,假设我正在使用Node.js和Restify编写API,其中每个API端点都对应一个函数,那么我应该:
a)打开db连接并将其存储在全局变量中,然后在每个函数中都使用它?
例如:
// requires and so on leave me with a db var, assume {auto_reconnect: true}
function openDB() {
db.open(function(err, db) {
// skip err handling and so on
return db;
}
}
var myOpenDB = openDB(); // use myOpenDB in every other function I have
b) 打开数据库连接,然后将所有内容放在一个大的闭包中吗?
示例:
// same as above
db.open(function(err, db) {
// do everything else here, for example:
server.get('/api/dosomething', function doSomething(req, res, next) { // (server is an instance of a Restify server)
// use the db object here and so on
});
}
c) 每次需要使用时打开和关闭数据库吗?
示例:
// again, same as above
server.get('/api/something', function doSomething(req, res, next) {
db.open(function(err, db) {
// do something
db.close();
});
});
server.post('/api/somethingelse', function doSomethingElse(req, res, next) {
db.open(function(err, db) {
// do something else
db.close();
});
});
这最后一个例子是我凭直觉会做的,但同时我并不完全舒服这样做。它不会对Mongo服务器造成太大的压力吗?特别是当它接收数百甚至数千个像这样的调用时(我希望我可以达到那个程度),你认为呢?
先行致谢。