如何在不断开连接的情况下使用Node.js杀死MySQL查询?
问题描述:
上下文: 我正在构建一个Web应用程序,它调用大型数据库(表中数百万行)的数据;有时用户可以改变主意,并在数据库查询完成之前调用新数据。如何在不断开连接的情况下使用Node.js杀死MySQL查询?
技术问题: 我试着用杀死在此情况下,查询:
app.get("/data", function(req, res) {
if (req.query.killQuery == "true") {
con.query("KILL \"" + threadId + "\"", function(err) {
if (err) throw err;
console.log("I have interrupted the executing query for a new request");
giveData(req, res); //The function that will execute a new query
});
return;
}
giveData(req, res); //The function that will execute a new query
});
现在我对这个代码的几个疑点:
我不得不用第二连接来终止第一个线程,因为在第一个完成之前,第一个无法执行新的查询。这是一个Node.js的行为还是做这种事情的正确方法?
KILL thread_id
语句关闭整个连接而不是停止单个查询。同样,它是Node.js的行为,还是MySQL本身?我是否应该断开连接并重新连接以停止查询并从另一个开始?
答
如果你有MySQL的现代版,您可以使用KILL QUERY <threadId>
,而不是将只杀死连接上当前正在执行的查询,但留下的连接完好。
+0
精彩* - *一个词,使一个更好的代码!非常感谢你=) – Giosialu
你是怎么找到nodejs的查询线程ID的?这只是连接线程ID? – Grork