Heim > Backend-Entwicklung > PHP-Tutorial > Wie verarbeitet man große CSV-Dateien mit 30 Millionen Zeichen effizient?

Wie verarbeitet man große CSV-Dateien mit 30 Millionen Zeichen effizient?

DDD
Freigeben: 2024-11-10 20:35:03
Original
586 Leute haben es durchsucht

How to Efficiently Process Large CSV Files with 30 Million Characters?

Effiziente Bearbeitung großer CSV-Dateien: Zeichenfolgen mit 30 Millionen Zeichen verarbeiten

Bei der Bearbeitung einer großen CSV-Datei tritt der Fehler „Nicht genügend Speicher“ auf Datei über Curl heruntergeladen. Die Datei enthält etwa 30,5 Millionen Zeichen und der Versuch, sie mithilfe von „r“ und „n“ in ein Zeilenarray aufzuteilen, schlägt aufgrund übermäßigen Speicherverbrauchs fehl. Um Zuordnungsfehler zu vermeiden, ziehen Sie alternative Ansätze in Betracht:

Streaming von Daten ohne Dateischreiben:

Verwenden Sie die Option CURLOPT_FILE, um Daten direkt in einen benutzerdefinierten Stream-Wrapper zu streamen, anstatt in ihn zu schreiben eine Datei. Durch die Definition Ihrer eigenen Stream-Wrapper-Klasse können Sie Datenblöcke sofort verarbeiten, ohne übermäßig viel Speicher zuzuweisen.

Beispiel für eine Stream-Wrapper-Klasse:

class MyStream {
    protected $buffer;

    function stream_open($path, $mode, $options, &$opened_path) {
        return true;
    }

    public function stream_write($data) {
        // Extract and process lines
        $lines = explode("\n", $data);
        $this->buffer = $lines[count($lines) - 1];
        unset($lines[count($lines) - 1]);

        // Perform operations on the lines
        var_dump($lines);
        echo '<hr />';

        return strlen($data);
    }
}
Nach dem Login kopieren

Registrieren Sie den Stream-Wrapper:

stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");
Nach dem Login kopieren

Configuration Curl mit dem Stream Wrapper:

$fp = fopen("test://MyTestVariableInMemory", "r+"); // Pseudo-file written to by curl

curl_setopt($ch, CURLOPT_FILE, $fp); // Directs output to the stream
Nach dem Login kopieren

Mit diesem Ansatz können Sie weiterarbeiten Datenblöcke inkrementell, wodurch Speicherzuweisungen vermieden werden und die Arbeit mit großen Zeichenfolgen möglich wird.

Weitere Überlegungen:

  • Testen Sie die Implementierung gründlich, um sicherzustellen, dass sie funktioniert lange Zeilen und andere Randfälle.
  • Zusätzlicher Code kann erforderlich sein, um Datenbankeinfügungen durchzuführen.
  • Dies Lösung dient als Ausgangspunkt; Anpassung und Optimierung können erforderlich sein.

Das obige ist der detaillierte Inhalt vonWie verarbeitet man große CSV-Dateien mit 30 Millionen Zeichen effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage