Qual é a melhor prática para conexões do MongoDB no Node.js?
Isso é algo que não está claro para mim (estou apenas começando com o Node e o Mongo), e realmente me preocupa por causa do desempenho e da sobrecarga do servidor (o que eu acho que é outra questão, mas vou chegar a isso em o final do post).
Então, supondo que eu esteja escrevendo uma API com o Node.js e o Restify, onde cada endpoint da API corresponde a uma função, eu deveria:
a) abra a conexão do banco de dados e armazene-o em um var global e, em seguida, use-o em todas as funções?
Exemplo:
// 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) abra a conexão db e depois coloque tudo em um fechamento gigante?
Exemplo:
// 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) abrir e fechar o banco de dados cada vez que é necessário?
Exemplo:
// 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();
});
});
Este último é o que eu faria por intuição, mas ao mesmo tempo não me sinto totalmente confortável fazendo isso. Não coloca muita pressão sobre o servidor Mongo? Especialmente quando (e espero chegar a isso), são centenas - se não milhares - de chamadas assim?
Agradeço antecipadamente.