2

を使用node-mongodb-nativeしてローカルのMongoDBインスタンスに接続しています。接続の処理方法に頭を悩ませるのに少し問題があります。私はMongoDBのものをカスタムDatabaseモジュールに抽象化しようとしました:

Database.js

var mongo = require('mongodb'); 
var Database = function() { return this; };

Database.prototype.doStuff = function doStuff(callback) {
    mongo.connect('mongodb://127.0.0.1:27017/testdb', function(err, conn) {
        conn.collection('test', function(err, coll) {
            coll.find({}, function(err, cursor) {
                cursor.toArray(function(err, items) {
                    conn.close();
                    return callback(err, items);
                });
            });
        });
    });
};

// Testing
new Database().doStuff(function(err, items) {
    console.log(err, items);
});

メソッドごとに新しい接続が必要ですか?それは非常に速く高価になるようです。おそらく、コンストラクターで接続が確立され、後続の呼び出しで既存の接続が利用されることを想像しました。

この次の質問は設計上の質問かもしれませんが、接続のセットアップと破棄がコストのかかる操作になる可能性があることを考慮して、データベースへの呼び出しに利用できるアプリケーションにグローバルなデータベースオブジェクトを追加することを検討しています。これは合理的だと思いますか?

上記のコードはおおよそここから取られたものであることに注意してください。ご協力いただきありがとうございます。

4

1 に答える 1

2

メソッドごとに新しい接続は必要ありません。一度開いて、その後の呼び出しに使用できます。同じことが個々のコレクション変数にも当てはまります。collection()への1回の呼び出しの結果をキャッシュできます。これにより、これらのコールバックは1回だけ必要になり、他の場所には除外されます。

于 2012-04-10T19:18:02.360 に答える