これは私には少し不明な点です(私はNodeとMongoを使い始めています)。サーバのパフォーマンスと負荷のために本当に懸念されています(別の質問ですが、それはポストの終わりに)。Node.js上のMongoDB接続のベストプラクティスは何ですか?
a)のDB接続をオープンし、グローバルに保管し:私は、私は各APIエンドポイントが関数に対応するのNode.jsとRestify、とのAPIを書いていなければならないと仮定ので
、 varを使用して、それをすべての関数で使用しますか?
例:
// 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)オープンとDBにそれが必要とされるたびに閉じ?
例:
// 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サーバーに負担をかけることはありませんか?特に(そして私がそれに到達することを願って)何百もの呼び出しではなく、何百もの呼び出しを得ます。
ありがとうございます。
オプションBでは、名前付き関数を使用して大量のクロージャを回避できるので、コールバックhellを回避できます。つまり、ノードを使用しているなら、あなたはモジュールを使用しています(私は望みます)。(いくつかの少数の宣言された!)グローバル変数を持つことを意味します - 他の誰の名前空間も汚染しません。モジュールのエクスポートを除く '.js'ファイル – Gijs
ありがとう!あなたはオプションBを使うことを提案しますか?私はドライバーの[Googleグループ](https://groups.google.com/forum/?fromgroups#!forum/node-mongodb-native)を掘り下げていました。誰もが何らかの形で接続の再利用を提案しているようです(彼らのほとんどは実際にはオプションBのようなものを示唆している)。 – ArturoVM
一方、私は、同じ接続の下ですべてを行うことは、ノードの非同期性の目的を破って、ブロックしていると読んでいます。 – ArturoVM