2017-06-15 92 views
1

上下文: 我正在構建一個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

回答

0

如果你有MySQL的現代版,您可以使用KILL QUERY <threadId>,而不是將殺死連接上當前正在執行的查詢,但留下的連接完好。

+0

精彩* - *一個詞,使一個更好的代碼!非常感謝你=) – Giosialu

相關問題