私は、20億のオーダー(何百万行ものデータを集める)という非常に大きなクエリをMySQLデータベースに持っています。クエリはAJAX呼び出しを介して実行され、PHPスクリプトからの応答を待ってデータを収集します。Javascript/AJAXから大規模なmysqliクエリを実行しているPHPスクリプトを中断する
JSクエリ:
$.ajax({
url: "../largeQuery.php",
type: "POST",
success: function (data) {
alert(data);
}
});
largeQuery.php:
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); //these are set elsewhere
$largeQuery = 'I am some super long query';
$response = $mysqli->query($largeQuery);
print_r($response);
ユーザーがページの内容を変更しないと$response
データが必要なくなった場合には、次のページがロックされていますMySQLはまだ$largeQuery
をフェッチしており、完了するまで別のクエリを処理できないため、$largeQuery
が終了します。
$thread_id = $mysqli->thread_id
からスレッドIDを取得してから$mysqli->kill($thread_id)
で終了することができますが、現在実行中のPHPコードを更新するにはどうすればよいですか?
あなたはこれをチェックしましたか? – Dekel
たぶんあなたは "大規模なクエリ"を修正し、より速く実行させるべきです。 –
セッションを開いていると思われる場合はブラウザに応じて4つ(または6)の同時接続が可能です。セッションを解放するためにクエリを開始した後に 'session_write_close'を呼び出してみてください。また不要になった場合は 'XMLHttpRequest'を取り消します。 – andrew