如何在不断开连接的情况下使用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本身?我是否应该断开连接并重新连接以停止查询并从另一个开始?

+0

你是怎么找到nodejs的查询线程ID的?这只是连接线程ID? – Grork

如果你有MySQL的现代版,您可以使用KILL QUERY <threadId>,而不是将杀死连接上当前正在执行的查询,但留下的连接完好。

+0

精彩* - *一个词,使一个更好的代码!非常感谢你=) – Giosialu