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); //显示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"});
您可以在这里参考官方文档