我应该合并数据库连接还是为每个集群创建新连接?
Should I pool db connections or create new connection per cluster?
我在多个进程上有一个 Node.js 应用程序 运行,我想知道我是否应该合并我的 MongoDB(使用 mongoose)连接我们应该创建一个新连接对于每个集群叉。
这是一个例子:
我应该像这样为每个分支创建一个新的数据库连接吗:
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
创建一个连接
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)
}
在第二种情况下,您的代码没有共享公共池,您只是分别为主进程和每个工作进程创建池。无法在您的集群中共享单个 MongoDB 客户端连接池。
因此,假设您实际上并未在主进程中使用 mongoose,最好只在工作进程中调用 mongoose.connect
,就像您在第一种情况下一样,池的大小随您的需要而定每个进程。
另请注意 poolSize
默认为 5,因此即使您不包含 poolSize
选项,mongoose.connect
仍会创建连接池。
我在多个进程上有一个 Node.js 应用程序 运行,我想知道我是否应该合并我的 MongoDB(使用 mongoose)连接我们应该创建一个新连接对于每个集群叉。
这是一个例子:
我应该像这样为每个分支创建一个新的数据库连接吗:
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
创建一个连接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)
}
在第二种情况下,您的代码没有共享公共池,您只是分别为主进程和每个工作进程创建池。无法在您的集群中共享单个 MongoDB 客户端连接池。
因此,假设您实际上并未在主进程中使用 mongoose,最好只在工作进程中调用 mongoose.connect
,就像您在第一种情况下一样,池的大小随您的需要而定每个进程。
另请注意 poolSize
默认为 5,因此即使您不包含 poolSize
选项,mongoose.connect
仍会创建连接池。