phpbar.de logo

Mailinglisten-Archive

[php] Viel Arbeit: Tausende Durchläufe

[php] Viel Arbeit: Tausende Durchläufe

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Mit Apr 7 12:30:11 CEST 2004


Hi Thomas,

Zitat von Thomas Gigold:

> >> Ich habe folgendes Problem und suche nach einer guten Lösung:
> >> Ich habe ein Script, das aus einer Tabelle A knapp 1500 Einträge liest
> >> (werden stetig mehr). Innerhalb der while-Schleife wird eine Datei
> >> gelesen, diese mit einem in Tabelle B vorhandenen Eintrag
> >> gegengeprüft. Gibt es eine Änderung wird der Inhalt der Datei in die
> >> Tabelle B geschrieben.
> >
> >
> > welche Rolle spielt dabei Tabelle A ?
> > geht die While-Schleife über die Einträge der Tabelle A oder B ?
>
> Die while-Schleife läuft über die Einträge der Tabelle A,
> dort liegen die Namen der Dateien. In Tabelle B liegen die
> Inhalte der Dateien.
>
> > du könntest die UPDATE-Abfragen für die Tabelle B 'sammeln' und wenn du
> > 50 oder so zusammen hast diese auf einmal abschicken
>
> Ich sehe gerade nicht den wirklichen zeitwerten Vorteil ...
> Ich schaffe damit vielleicht ein paar Durchläufe mehr, aber
> nicht die ganze Ladung; vor allem da die meiste Zeit
> sicherlich das holen, "parsen" und Gegenchecken der
> Dateiinhalte benötigt ...

ich finde, das Schoene an dieser Liste sind die immer wieder sehr
unterschiedlichen Loesungsansaetze. :-) Gerade das ist eigentlich besonders
fruchtbar.

In diesem Sinne fand ich Sebastians Ansatz, im Gegensatz zu mir ueberhaupt erst
einmal die Logik zu hinterfragen und durch eine Optimierung der Logik auch die
Laufzeit des Skripts zu senken, sehr gut.

Vielleicht kann man den Ansatz von Sebastian ja in eine andere Richtung
weiterdenken. Ich frage mich z.B., ob es wirklich immer noetig ist, sich alle
Datensaetze zu schnappen und auf Aenderungen zu pruefen. Da Du jetzt schon
1.500 Datensaetze hast und die Anzahl der Datensaetze nach Deiner Aussage
stetig zunimmt, wird das Ganze immer Schwerfaelliger und Unperformanter werden.

D.h. die Loesung ist doch eigentlich, sich nur diejenigen Datensaetze zu
schnappen, die sich seit der letzten Pruefung geaendert haben. Mittlerweile
habe ich gelernt, dass man sowas in der Fachsprache als Delta bezeichnet... ;-)

Das Delta kannst Du doch ermitteln, indem Du die Datensaetze bei einer Aenderung
z.B. mit einem Zeitstempel versiehst, der den Aenderungszeitpunkt festhaelt.
Ebenso waere eine separate Tabelle denkbar, in der Du Aenderungen festhaeltst.
Die dort festgehaltenen Aenderungen arbeitet Dein Skript dann ab, setzt sie auf
"Bearbeitet" und loescht anschliessend alle auf "Bearbeitet" gesetzten
Datensaetze aus der Aenderungstabelle.


Viele Gruesse

Lutz

php::bar PHP Wiki   -   Listenarchive