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