mariadb 使用1个MySQL连接向多个用户提供结果

k7fdbhmy  于 2022-11-08  发布在  Mysql
关注(0)|答案(1)|浏览(183)

我在JS节点中使用了MYSQL的一个单连接对象来为多个用户服务。
我的意思是说,MySQL连接将在启动脚本时创建,它将保持不变,直到节点脚本/服务器的生命周期。
实际上,这是可以做到的&我也做过同样的事情。请看下面的NodeJS/MySQL脚本代码。

#################################

var http = require('http');
var mysql = require('mysql');

 var con = mysql.createConnection({
  host: "192.168.1.105",
  user: "root",
  password: "XXXXXX",
  database: "mydb"
});

con.connect(function(err) {
  if (err) {
     console.error('error: ' + err.message);
       process.exit(1);
  }

      http.createServer(function (req, res) {
         continueExecution(req,res);
      }).listen(8082);

});

async function continueExecution(req,res){

    res.write('calledddd\n');

    for (let step = 0; step < 50; step++) {
    // Runs 5 times, with values of step 0 through 4.
       var bar = `Company Inc ${step}`; 
       var sql = `INSERT INTO customers (name, address) VALUES ('${bar}', 'Highway 37')`;

       res.write(sql + "\n");

      con.query(sql, function (err, result) {
       if (err) throw err;
         res.write("1 record inserted\n");
       });
    } 

     res.write('reached\n');
    for (let ste = 0; ste < 50; ste++) {

             res.write('started Update\n');
             var bar = `Company Inc ${ste}`; 
             var sql = `UPDATE customers SET name = 'UPDATE RECORD' WHERE name = '${bar}'`;
             con.query(sql, function (err, result) {
            if (err) throw err;
              res.write(result.affectedRows + " record(s) updated\n");

              if(ste == 50) {
                res.writeHead(200, {'Content-Type': 'text/html\n'});
                res.write('Databse connected\n');

                 res.end();
               } 
            });
      }
}

#################################

我有几个问题在我的脑海中,因为我是技术Maven。但我没有找到任何资源,我的问题。请帮助我在这方面
Q1.使用一个MySQL连接向多个用户提供响应会有什么后果?
Q2.让我们举一个例子。100个用户想要同时访问表名“users_data”。25个用户正在用唯一主键更新同一个表中的记录。50个用户正在选择他们的记录。另外25个用户正在删除他们的记录。所有这些操作都是通过远程设备的并行节点脚本调用同时完成的。
要完成所有这些MySQL事务,系统仅使用1个数据库连接。
在这种情况下会发生什么?

pgpifvop

pgpifvop1#

为了回答您的问题,使用唯一连接的后果之一是它会导致请求执行速度变慢。
实际上,即使节点异步发出请求,您的数据库也会同步执行所有这些请求,因此会按照它们到来的顺序一个接一个地执行。由于节点异步发出请求,您的数据库执行这些请求的顺序是不确定的,因此可能会出现您所提到的问题。
避免这种情况的一个简单方法是使用一个连接池,它将使用同一个数据库用户创建给定数量的连接。下面的一些链接可能会帮助您做到这一点:
using a connection pool with node.js
connect a mysql database with node.js

相关问题