2017-06-15 5 views
1

コンテキスト: 大きなデータベース(数百万行のテーブル)からデータを呼び出すWebアプリケーションを構築しています。 DBのクエリが完了する前に、ユーザが気を変えて新しいデータを呼び出すことがあります。接続を解除せずにNode.jsを使用してMySQLクエリを強制終了するにはどうすればいいですか?

技術的な質問は:

  • 私は2番目を使用していた:

    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の現代版をお持ちの場合は

+0

nodejsでどのようにクエリスレッドIDを見つけましたか?それは単なる接続スレッドIDですか? – Grork

答えて

0

、あなたはだけは、その接続で現在実行中のクエリを殺すなる代わりにKILL QUERY <threadId>を使用しますが、そのまま接続を残すことができます。

+0

素敵な* - *はるかに良いコードを作る1つの単語!ありがとう=) – Giosialu

関連する問題