Aktueller Standort: Startseite> Neueste Artikel> So verwenden Sie Array_Chunk, um Big Data zu segmentieren und asynchron zu verarbeiten

So verwenden Sie Array_Chunk, um Big Data zu segmentieren und asynchron zu verarbeiten

M66 2025-04-27

Während der Entwicklung müssen wir häufig große Datenmengen bearbeiten. Die gleichzeitige Verarbeitung zu viel Daten dauert nicht nur viel Zeit, sondern kann auch Speicherüberlauf verursachen. Um die Leistung und die Benutzererfahrung zu verbessern, können wir die Blockverarbeitung übernehmen. Array_Chunk ist eine sehr nützliche Funktion, die in PHP integriert ist und ein großes Array in mehrere kleine Arrays unterteilt kann. In Kombination mit asynchronen Operationen können wir die Ausführungseffizienz des Programms während des Chunking verbessern.

1. Was ist Array_Chunk ?

Array_Chunk ist eine der PHP -Array -Funktionen. Seine Funktion besteht darin, ein großes Array in mehrere kleine Arrays aufzuteilen, wobei jedes kleine Array eine bestimmte Anzahl von Elementen enthält. Diese Funktion ist sehr geeignet für Situationen, in denen große Mengen an Daten benötigt werden und die Speicherverwendung effektiv reduzieren können.

Funktionsprototyp:

 array_chunk(array $array, int $size, bool $preserve_keys = false): array
  • $ Array : Das Array, das zu unterteilen ist.

  • $ Größe : Die Größe jedes kleinen Arrays.

  • $ PREISERVE_KEYS : Ob Sie den Schlüsselnamen des ursprünglichen Arrays erhalten müssen (Standard ist falsch ).

2. Beispiel für die Verwendung von Array_Chunk

Angenommen, wir haben ein Array von 1000 Daten und verwenden Sie Array_Chunk , um sie in 10 kleine Arrays zu teilen, wobei jedes kleine Array 100 Elemente enthält.

 <?php
$data = range(1, 1000); // erzeugen1ankommen1000Array von
$chunkedData = array_chunk($data, 100);

print_r($chunkedData);
?>

Ausgangsergebnis:

 Array
(
    [0] => Array ( [0] => 1 [1] => 2 ... [99] => 100 )
    [1] => Array ( [0] => 101 [1] => 102 ... [99] => 200 )
    ...
)

Auf diese Weise teilen wir das große Array $ -Daten in mehrere kleine Arrays, jedes kleine Array enthält 100 Elemente.

3.. In Kombination mit asynchronem Betrieb, um die Leistung zu verbessern

Nachdem wir Array_Chunk verwendet haben, um Big Data zu blockieren, können wir asynchrone Operationen weiter kombinieren, um die Leistung zu verbessern. Asynchrone Operationen können dazu führen, dass mehrere Aufgaben parallel ausgeführt werden, wodurch das Blockieren vermieden wird. Asynchrone Operationen können in vielerlei Hinsicht in PHP implementiert werden, unter der die häufigste Methode darin besteht, Curl_Multi_exec oder PHP -Async -Erweiterung zu verwenden.

Angenommen, wir möchten die Daten jedes Stücks über HTTP-Anforderungen verarbeiten. Die ursprüngliche Verarbeitungsmethode kann darin bestehen, Anforderungen einzeln zu initiieren, was zu einer langfristigen Blockade führt. Wir können asynchrone Anfragen verwenden, um mehrere Anforderungen gleichzeitig im Hintergrund zu initiieren, wodurch die Verarbeitungseffizienz verbessert wird.

Beispiel: Verwenden Sie curl_multi_exec , um Daten asynchron zu verarbeiten

 <?php
$data = range(1, 1000);  // Simulieren Sie Big Data
$chunkedData = array_chunk($data, 100);  // Blockverarbeitung

// Initialisierung cURL multi handle
$mh = curl_multi_init();

// Der Griff zum Speichern jeder Anfrage
$curlHandles = [];

// Durch jeden Datenblock wiederholen,Asynchron initiieren eine Anfrage
foreach ($chunkedData as $index => $chunk) {
    $url = "http://m66.net/api/process_data";  // AnnahmeAPIAdresse
    $postData = json_encode(['data' => $chunk]);

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // 添加ankommen multi handle Mitte
    curl_multi_add_handle($mh, $ch);
    $curlHandles[$index] = $ch;
}

// Asynchrone Anfragen durchführen
do {
    $multiExec = curl_multi_exec($mh, $running);
    if ($running) {
        curl_multi_select($mh);
    }
} while ($running);

// Holen Sie sich den Antwortinhalt
foreach ($curlHandles as $index => $ch) {
    $response = curl_multi_getcontent($ch);
    echo "Response from chunk {$index}: " . $response . "\n";

    // Schließen Sie jeden Anforderungsgriff
    curl_multi_remove_handle($mh, $ch);
}

// Schließung multi handle
curl_multi_close($mh);
?>

In diesem Beispiel verwenden wir curl_multi_exec , um die Funktion asynchroner Anforderungen zu implementieren. Jeder Datenblock initiiert eine Anforderung über Curl und verarbeitet sie parallel, wodurch die Leistung erheblich verbessert wird.

4. Vorteile des asynchronen Betriebs

  1. Wartezeit verkürzen : Asynchrone Vorgänge können gleichzeitig mehrere Anfragen bearbeiten und die Wartezeit vermeiden, wenn Sie nacheinander anfordern.

  2. Verbesserung der Effizienz : Für I/O-intensive Operationen (wie HTTP-Anfragen) können asynchrone Operationen die Systemressourcen voll ausnutzen.

  3. Optimieren Sie die Ressourcenverwendung : Durch Chunking und asynchrone Verarbeitung vermeiden wir Probleme mit dem Speicherüberlauf und optimieren gleichzeitig die Nutzung der CPU- und Netzwerkbandbreite.

5. Dinge zu beachten

  1. Fehlerbehandlung : Bei asynchronen Operationen ist es besonders wichtig, Fehler zu bearbeiten. Wir müssen sicherstellen, dass der Erfolg und Misserfolg jeder Anfrage rechtzeitig erfasst und verarbeitet werden können.

  2. Ressourcenbeschränkungen : Obwohl asynchrone Operationen die Leistung verbessern können, sind sie nicht unbegrenzt. Stellen Sie sicher, dass die Anzahl der Anforderungen die Verarbeitungskapazität des Servers nicht überschreitet.

  3. Datenkonsistenz : Stellen Sie bei der asynchronen Verarbeitung sicher, dass die Verarbeitungsreihenfolge jedes Datenblocks das Endergebnis nicht beeinflusst.

6. Zusammenfassung

Durch die Verwendung der Funktion array_chunk können wir Big Data einteilen und die Speicherverwendung reduzieren. In Kombination mit asynchronen Operationen (z. B. curl_multi_exec ) können wir gleichzeitig mehrere Datenblöcke verarbeiten und die Leistung des Programms weiter verbessern. Diese Methode ist besonders effektiv bei der Verarbeitung großer Datenmengen und kann die Benutzererfahrung erheblich verbessern, insbesondere in Szenarien, in denen eine große Anzahl von Netzwerkanforderungen oder E/A -Vorgängen erforderlich ist.