Nodejs HTTP服务器处理插入DB的多个请求

时间:2013-12-10 03:09:18

标签: node.js mongodb http

我有一个http服务器,每次收到一个post请求时,都应该将数据插入到MongoDB中。该服务器应该在任何给定的秒内持续运行并接受数千个请求。

如何最大限度地提高代码的效率和速度?我觉得我当前的代码速度不够快,每次收到请求时都会产生新的数据库,从而浪费CPU能力。

我当前的布局

var server = http.createServer(function (req, res) {

     req.on('data', function(chunk) {
          //Receive my data
     });

     req.on('end', function() {
          //JSON parse my data
          var db = new Db('test', new Server("111.111.11.111", 27017,{auto_reconnect: false}), {safe: true});  

          db.open(function(err, db) {
               //Insert data into DB
               db.close();
          });
     });
}); //End Http server
server.listen(8999);

我尝试用MongoClient.connect替换db.open,但这会大大减慢处理速度,我不知道为什么。在这种情况下,旧版本的MongoDB Native for node js似乎工作得更快。

2 个答案:

答案 0 :(得分:2)

您将希望转向在启动期间打开由HTTP请求处理程序共享的大型连接池的方法。要调整MongoDB连接池大小以满足您的任何可伸缩性需求,请将options参数传递给MongoClient.connect调用。

var options = {
    server: {
        // The number of pooled connection available to your app.
        poolSize: 100
    }
};

mongodb.MongoClient.connect('mongodb://111.111.11.111/test', options, 
    function(err, db) {
        var server = http.createServer(function (req, res) {
            // Your req.on calls go here, directly using db rather than creating
            // new instances. Don't close db either.
        });
        server.listen(8999);  
    }
);

答案 1 :(得分:0)

不确定这是否会更好,但您可以将该服务器封装在数据库中,从而保持连接:

var db = new Db('test', new Server("111.111.11.111", 27017,{auto_reconnect: false}), {safe: true});  

db.open(function(err, db) {
    var server = http.createServer(function (req, res) {
        //now do stuff thru constant open connection
    });      
    db.close();
});