我应该汇集数据库连接还是为每个群集创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池。 没有办法在集群中共享单个MongoDB客户端连接池。
所以,假设你在主进程中并没有使用mongoose,最好只在工作进程中调用mongoose.connect
,就像你在第一种情况下一样,池的大小可以根据每个进程的需要而定。
另请注意, poolSize
默认为5,所以即使不包含poolSize
选项, poolSize
仍然会创build一个连接池。