使用Node.js群集库时,是否应在主线程或每个子线程中建立与MongoDB的连接?
首先,多个线程可以使用相同的连接吗?
其次,使用相同或单独的连接是否更具性能效果
答案 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');
...
}