我应该汇集数据库连接还是为每个群集创build新的连接?

我有一个Node.js应用程序运行在多个进程,我想知道如果我应该集中我的MongoDB(使用mongoose)连接,我们应该为每个集群分叉创build一个新的连接。

这是一个例子:

我应该像这样为每个叉创build一个新的数据库连接:

if (cluster.isMaster) { var totalCPUs = os.cpus().length; var forks = 0; while (forks < totalCPUs) { cluster.fork(); forks++; } cluster.on('exit', function(worker) { console.error("Cluster worker " + worker.id + " exited unexpectedly."); return cluster.fork(); }); } else { mongoose.connect(uri); ... app = express() http.createServer(app).listen(8080) } 

或者用poolSize创build一个连接

 if (cluster.isMaster) { var totalCPUs = os.cpus().length; mongoose.connect(uri, { server: { poolSize: totalCPUs }); var forks = 0; while (forks < totalCPUs) { cluster.fork(); forks++; } cluster.on('exit', function(worker) { console.error("Cluster worker " + worker.id + " exited unexpectedly."); return cluster.fork(); }); }else{ app = express() http.createServer(app).listen(8080) } 

       

网上收集的解决方案 "我应该汇集数据库连接还是为每个群集创build新的连接?"

您的代码在第二种情况下不共享公共池,您只是为主服务器和每个工作进程单独创build池。 没有办法在集群中共享单个MongoDB客户端连接池。

所以,假设你在主进程中并没有使用mongoose,最好只在工作进程中调用mongoose.connect ,就像你在第一种情况下一样,池的大小可以根据每个进程的需要而定。

另请注意, poolSize默认为5,所以即使不包含poolSize选项, poolSize仍然会创build一个连接池。