Wir hatten eine ähnliche Situation. Nach vielen Versuchen, das Skript zu verbessern, haben wir entschieden, dass wir einen anderen Ansatz brauchen, damit unser Import funktioniert und nicht ~10 Stunden dauert.
Wir haben den gesamten PHP-Code ausgegeben und stattdessen mysqlimport
verwendet um den Inhalt der CSV-Datei direkt in eine Tabelle zu laden. Diese Tabelle enthält jetzt alles, was wir brauchen, aber nicht in einer Form, die für uns nützlich ist (keine Struktur, einige Felder müssen verarbeitet werden usw.)
Da sich jetzt jedoch alles in der Datenbank befindet, können wir mit einer Abfrage alles tun, was wir wollen. Zum Beispiel alle Daten löschen, die nicht mehr in der Importdatei sind, das ist nur DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL;
, das Aktualisieren vorhandener Datensätze ist nur UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField);
.
Offensichtlich werden Ihre Abfragen für ein komplexes Importskript komplexer und Sie benötigen mehr davon. Möglicherweise müssen Sie sogar einige gespeicherte Prozeduren einwerfen, um die Verarbeitung einzelner Felder durchzuführen. Aber wenn Sie diese Art von Ansatz verfolgen können, erhalten Sie am Ende einen Prozess, der viele Daten verarbeiten kann und sehr skalierbar ist.