これは私には少し不明確なことであり (私は Node と Mongo を使い始めたばかりです)、サーバーのパフォーマンスと負荷のために本当に懸念しています (これは別の質問だと思いますが、それについては後で説明します)。投稿の終わり)。
したがって、各 API エンドポイントが関数に対応する Node.js と Restify を使用して 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) db 接続を開き、すべてを 1 つの巨大なクロージャに入れるだけですか?
例:
// 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();
});
});
この最後の 1 つは、私が直感的に行うことですが、同時に、これを行うのが完全に快適ではありません。Mongo サーバーに負担をかけすぎていませんか? 特に(そして、私がそれに到達することを願っています)、何千とまではいかなくても、何百もの呼び出しがこのようなものになる場合はどうなりますか?
前もって感謝します。