Einen schönen Freitagmorgen…
Ich muss eine .txt-Datei monatlich Daten in eine MySql-DB importieren. Die Text-Datei enthält ca. 30.000 Zeilen, jede Zeile entspricht einem Datensatz.
Für den Import muss für jede Zeile abgefragt werden, ob ein entsprechender Datensatz in der DB existiert oder nicht. Dementsprechend wird eine Update- bzw. Insert-Anweisung ausgeführt.
Das Problem ist jetzt, dass in kurzer Zeit mehrere zigtausend DB-Abfragen ausgeführt werden und der Server doch arg beansprucht wird.
Gibt es vielleicht irgendeine Optimierung für solche Fälle, bzw. wie kann ich am besten herausfinden wo die Ressourcen verbaucht werden: Mysql oder PHP-Skript?
Das Problem ist jetzt, dass in kurzer Zeit mehrere zigtausend
DB-Abfragen ausgeführt werden und der Server doch arg
beansprucht wird.
Gibt es vielleicht irgendeine Optimierung für solche Fälle,
bzw. wie kann ich am besten herausfinden wo die Ressourcen
verbaucht werden: Mysql oder PHP-Skript?
Optimierung gibt es, das bedeutet allerdings Arbeit.
Wer hat Erfahrungen mit so was?
Ich habe das gerade für ein ähnliches Projekt gemacht. Da müssen regelmäßig Adressen abgeglichen werden und das ganze darf nicht zu lange dauern. Am Anfang habe ich jede Adresse einzeln abgeglichen, was zu Zeiten von bis zu einer Stunde führte. Inzwischen geht der Abgleich auch mit großen Datenmengen in maximal 5 Minuten.
Die Technik dabei: Die Rohdaten erst in eine temporäre Tabelle einlesen, dann mittels SQL-Befehlen den Abgleich direkt über die Datenbank machen. Gegebenenfalls weitere temporäre Tabellen mit den Ergebnisdaten erstellen.
Durch diese Art der Batch-Verarbeitung erreichst Du die optimale Performance, weil für den Abgleich selbst im Idealfall nur eine SQL-Anweisung notwendig ist.
Weitere Einzelheiten kann ich leider im Rahmen dieses Forums nicht geben. Es ist kommt halt auf die Struktur der Daten an, das muss ganz individuell programmiert werden.