5

Node.jsのネイティブ Mongo ドライバーのラッパーとしてMongoJSを使用しようとしています。、などpopulate()のメソッドを使用して、コレクション内のドキュメントを JavaScript クラスとしてモデル化しています。save()

C# や Java などのほとんどの言語では、クエリごとに明示的に接続してから切断することに慣れています。ほとんどの例は、接続の例のみを示していますが、完了時に接続を閉じることはありません。ドライバーがこれを自分で管理できるのか、それとも自分で手動で管理する必要があるのか​​はわかりません。ドキュメントはまばらです。

関連するコードは次のとおりです。

User.prototype.populate = function(callback) {
    var that = this;    

    this.db = mongo.connect("DuxDB");
    this.db.collection(dbName).findOne({email : that.email}, function(err, doc){
        if(!err && doc) {
            that.firstName  = doc.firstName;
            that.lastName   = doc.lastName;
            that.password   = doc.password;
        }

        if (typeof(callback) === "function"){
            callback.call(that);
        }

        that.db.close();
    });
};

MongoJS オブジェクトでメソッドを呼び出すとすぐにclose()、後続の呼び出しで新しい接続を開くことができなくなりました。ただし、このメソッドを呼び出さないと、Mongo からの切断を待機しているかのように、すべての非同期呼び出しが終了しても Node プロセスは終了しません。

MongoJSでMongoへの接続を管理する適切な方法は何ですか?

4

4 に答える 4

7

接続を切断するのではなく、接続を開いたままにしておくと、アプリケーションのパフォーマンスが向上します。TCP 接続を確立し、MongoDB の場合は必要に応じてレプリカ セット/シャーディング構成を検出することは、クエリと更新を実際に処理するのに費やされる時間と比較して比較的高価です。この作業を何度もやり直すよりも、この時間を一度 "費やして" 接続を開いたままにしておく方がよいでしょう。

于 2012-04-18T19:15:41.610 に答える
5

クエリごとに接続を開いたり閉じたりしないでください。接続を一度開き、再利用します。

于 2012-04-18T19:14:35.417 に答える
2

すべての呼び出しでデータベース接続を再利用して、このようなことをさらに行います

User = function(db) {
  this.db = db;
}


User.prototype.populate = function(callback) {
  var that = this;  
  this.db.collection(dbName).findOne({email : that.email}, function(err, doc){
      if(!err && doc) {
          that.firstName  = doc.firstName;
          that.lastName   = doc.lastName;
          that.password   = doc.password;
      }

      if (typeof(callback) === "function"){
          callback.call(that);
      }
  });
};
于 2012-04-18T19:38:29.210 に答える
0

各リクエストの後に実際に接続を閉じると思いますが、mongodb サーバー構成で {auto_reconnect:true} を設定するため、必要なときはいつでも新しい接続を再開します。

于 2012-08-27T15:52:54.070 に答える