国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim 類庫下載 PHP類庫 Implementierung einer asynchronen Abfrage der MySQL-Datenbank in PHP

Implementierung einer asynchronen Abfrage der MySQL-Datenbank in PHP

Oct 14, 2016 am 10:43 AM

Problem

Normalerweise ist der Leistungsengpass einer Webanwendung die Datenbank. Denn normalerweise sind MySQL-Abfragen in PHP seriell. Das hei?t, wenn zwei SQL-Anweisungen angegeben sind, wartet die zweite SQL-Anweisung, bis die erste SQL-Anweisung ausgeführt wird, bevor sie diese ausführt. Wenn zu diesem Zeitpunkt zwei SQL-Anweisungen ausgeführt werden, betr?gt jede Ausführungszeit 50 ms und es kann 100 ms dauern, bis die Ausführung abgeschlossen ist. Da der Hauptgrund in der seriellen Ausführung von SQL liegt. K?nnen wir also die Ausführungsmethode ?ndern, um die Leistung zu verbessern? Die Antwort lautet: Ja. Wir k?nnen die Leistung durch asynchrone Ausführung verbessern.

Asynchron

Bei asynchroner Ausführung kann die Leistung erheblich verbessert werden. Wenn die asynchrone Methode verwendet wird, werden die beiden SQL-Anweisungen gleichzeitig ausgeführt und es kann 60 ms dauern, bis die Ausführung abgeschlossen ist.

Implementieren Sie

mysqli mysqlnd. Die asynchrone Abfragemethode wird in mysqlnd bereitgestellt und offiziell von PHP implementiert. Dies sind:
mysqlnd_async_query sendet eine Abfrageanforderung
mysqlnd_reap_async_query erh?lt die Abfrageergebnisse
Auf diese Weise müssen Sie nicht jedes Mal blockieren und auf die Abfrageergebnisse warten, nachdem Sie die Abfrageanforderung gesendet haben.

Der Implementierungscode lautet wie folgt:

<!--?php
   
$host       = &#39;127.0.0.1&#39;;
$user       = &#39;root&#39;;
$password   = &#39;&#39;;
$database   = &#39;test&#39;;
   
/**
 * 期望得到額結(jié)果
 * array(
 *  1 =--> int,
 *  2 => int,
 *  3 => int
 * )
 */
$result = array(1=>0, 2=>0, 3=>0);
   
//異步方式[并發(fā)請(qǐng)求]
$time_start = microtime(true);
$links = array();
   
foreach ($result as $key=>$value) {
    $obj = new mysqli($host, $user, $password, $database);
    $links[spl_object_hash($obj)] = array(&#39;value&#39;=>$key, &#39;link&#39;=>$obj);
}
$done = 0;
$total = count($links);
   
foreach ($links as $value) {
    $value[&#39;link&#39;]->query("SELECT COUNT(*) AS `total` FROM `demo` WHERE `value`={$value[&#39;value&#39;]}", MYSQLI_ASYNC);
}
   
do {
   
    $tmp = array();
    foreach ($links as $value) {
        $tmp[] = $value[&#39;link&#39;];
    }
   
    $read = $errors = $reject = $tmp;
    $re = mysqli_poll($read, $errors, $reject, 1);
    if (false === $re) {
        die(&#39;mysqli_poll failed&#39;);
    } elseif ($re < 1) {
        continue;
    }
   
    foreach ($read as $link) {
        $sql_result = $link->reap_async_query();
        if (is_object($sql_result)) {
            $sql_result_array = $sql_result->fetch_array(MYSQLI_ASSOC);//只有一行
            $sql_result->free();
            $hash = spl_object_hash($link);
            $key_in_result = $links[$hash][&#39;value&#39;];
            $result[$key_in_result] = $sql_result_array[&#39;total&#39;];
        } else {
            echo $link->error, "\n";
        }
        $done++;
    }
   
    foreach ($errors as $link) {
        echo $link->error, "1\n";
        $done++;
    }
   
    foreach ($reject as $link) {
        printf("server is busy, client was rejected.\n", $link->connect_error, $link->error);
        //這個(gè)地方別再$done++了。
    }
} while ($done<$total);
var_dump($result);
echo "ASYNC_QUERY_TIME:", microtime(true)-$time_start, "\n";
   
$link = end($links);
$link = $link[&#39;link&#39;];
echo "\n";

Fazit

Mysql-Datenbank startet einen separaten Thread für die Verarbeitung jeder Abfrageanforderung. Wenn der MySQL-Server zu viele Threads startet, führt der Threadwechsel zwangsl?ufig zu einer hohen Systemlast. Wenn die Auslastung der MySQL-Datenbank nicht hoch ist, ist die Verwendung einer asynchronen Abfrage immer noch eine gute Wahl.

Referenzdokument

http://www.walu.cc/php/async-mysql-query.md


Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276