Node.js 使用连接池

示例

一种。同时运行多个查询

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模块将搜索下一个空闲连接以执行查询。

b。在托管有不同数据库的数据库服务器上实现多租户。

如今,多租户已成为企业应用程序的常见要求,不建议在数据库服务器中为每个数据库创建连接池。因此,我们可以做的是与数据库服务器创建连接池,然后根据需要在托管在数据库服务器上的数据库之间切换它们。

假设对于数据库服务器上托管的每个公司,我们的应用程序都有不同的数据库。当用户点击应用程序时,我们将连接到相应的公司数据库。这是有关如何执行此操作的示例:-

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"});

您可以在这里参考官方文档