Nodejs MongoDB连接池如何工作?

时间:2015-06-23 14:33:11

标签: node.js mongodb connection connection-pooling

在以下代码中,mongoClient.connect调用(默认情况下)打开一个包含5个连接的池。由于Node是单线程的,因此只能进行一次调用(func1或func2可以随时处理(第二次调用等到第一次调用完成)。因此,池中的五个连接中只有一个被使用过。

使用Nodejs集群,如果我们分叉多个实例,每个实例都会打开它自己的连接池(每个实例5个连接)。

问题是 - MongoDB连接池如何在Node环境中工作。我们如何测试这个来证明同时使用同一个池中的多个连接?

mongoClient.connect('mongodb://localhost', function(err, db){
  app.get('/func1', function(req, res){
    for (var i=0; i<100000; i++){
      db.collection('test').insert({a:i});
    }
    res.end();
  });

  app.get('/func2', function(req, res){
    for (var i=0; i<100000; i++){
      db.collection('test').insert({a:i});
    }
    res.end();
  });
});

1 个答案:

答案 0 :(得分:1)

insert是异步的,因此/func1/func2处理程序都会排队100000个插入然后返回。然后,连接池在后台运行,以便一次执行不超过5次的插入(池中每个连接1个)。