我是否应该为每个线程

时间:2018-05-05 16:44:41

标签: node.js multithreading mongodb

使用Node.js群集库时,是否应在主线程或每个子线程中建立与MongoDB的连接?

首先,多个线程可以使用相同的连接吗?

其次,使用相同或单独的连接是否更具性能效果

3 个答案:

答案 0 :(得分:1)

问题表明 cluster 库使用线程,但它没有,它使用进程。

每个进程必须有自己的连接。不能跨进程共享连接。

答案 1 :(得分:0)

每个进程都应该有自己的连接。

不要混合会话。使用connect-mongo进行会话。

一旦客户端在其中一个worker上建立会话,它就不应该使用任何其他实例来执行与此客户端相关的操作,这样就可以在各自的服务器实例上缓存客户端。

答案 2 :(得分:0)

根据我的经验,每个孩子都需要一个连接,我在应用程序代码中使用以下模式,例如

const cluster       = require('cluster');
const mongoose      = require('mongoose');
...

if (cluster.isMaster) { // Parent, only creates clusters
  global.processId = 'Master';
  for (let i = 0; i < 2; ++i) {
      cluster.fork();
  }
  ...
} else { // Child cluster
    // connect
    mongoose.connect('mongodb://localhost/myDB');
    ...
}