使用连接池
一个。同时运行多个查询
MySQL 连接中的所有查询都是一个接一个地完成的。这意味着如果你想要执行 10 个查询并且每个查询需要 2 秒,那么完成整个执行将需要 20 秒。解决方案是创建 10 个连接并在不同的连接中运行每个查询。这可以使用连接池自动完成
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass',
database : 'schema'
});
for(var i=0;i<10;i++){
pool.query('SELECT ` as example', function(err, rows, fields) {
if (err) throw err;
console.log(rows[0].example); //Show 1
});
}
它将并行运行所有 10 个查询。
当你使用 pool
时,你不再需要连接。你可以直接查询池。MySQL 模块将搜索下一个免费连接以执行你的查询。
湾在托管在其上的不同数据库的数据库服务器上实现多租户
多租户是当今企业应用程序的常见要求,不建议为数据库服务器中的每个数据库创建连接池。所以,我们可以做的是创建与数据库服务器的连接池,然后根据需要在数据库服务器上托管的数据库之间切换它们。
假设我们的应用程序为数据库服务器上托管的每个公司提供不同的数当用户点击应用程序时,我们将连接到相应的公司数据库。以下是如何执行此操作的示例: -
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass'
});
pool.getConnection(function(err, connection){
if(err){
return cb(err);
}
connection.changeUser({database : "firm1"});
connection.query("SELECT * from history", function(err, data){
connection.release();
cb(err, data);
});
});
让我打破这个例子: -
在定义池配置时,我没有给出数据库名称,只给出了数据库服务器,即
{
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass'
}
因此,当我们想在数据库服务器上使用特定数据库时,我们要求连接使用以下命令来命中数据库: -
connection.changeUser({database : "firm1"});
你可以在这里参考官方文档