phpbar.de logo

Mailinglisten-Archive

[php] Viel Arbeit: Tausende Durchläufe

[php] Viel Arbeit: Tausende Durchläufe

Thorsten Körner thorstenkoerner at 123tkshop.org
Mit Apr 7 12:59:54 CEST 2004


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hallo Thomas
Am Mittwoch, 7. April 2004 10:16 schrieb Thomas Gigold:
> Hallo.
>
> 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.
> Schön und gut, die while-Schleife funktioniert.
> Da das lesen, prüfen und schreiben so seine Zeit dauert
> komme ich nicht in einem "Rutsch" durch die while-Schleife
> durch, weil es natürlich in einem Time-Out endet.
>
Warum sparst Du Dir nicht das lesen der ganzen Dateien und prüfst 
mittels filemtime() ob die Dateien geändert wurden. Dazu benötigst 
Du in Tabelle A einen Timestamp der letzten Änderung. Wenn eine 
Datei geändert wurde [1](also Rückgabe ist TRUE), dann erst liest 
Du die Datei und updatest Du Tabelle B, sowie den Timestamp in 
Tabelle A.
> Jetzt meine Frage:
> Wie schaffe ich es am geschicktesten, dass es nicht in einem
> Time-Out landet? Ich dachte ich lasse 50 Datensätze
> durchlaufen, geb dann die ID des letzten bearbeiteten
> Datensatzes per header-Weiterleitung an das gleiche Script
> wieder weiter und fang dann bei meiner DB-Abfrage mit einer
> id > $_GET['id'] an.
> Dachte eigentlich das sei eine gute Idee; leider bringt es
> auch nicht viel, da ich nach einer Weile wieder im Time-Out
> lande.
Das ist klar, weil der Script erst nach Ende des letzten Vorganges 
beendet wäre. Das könntest Du nur vermeiden indem Du jeweils 
Hintergrundprozesse erzeugst, die jeweils unter der Timout-Zeit 
abgearbeitet werden können.
>
> Wie handelt Ihr derlei Sachen? Ein Outbut muss dieses Script
> nicht erzeugen; es soll per CronJob regelmäßig angestossen
> werden und soll "vor sich hin werkeln".
Ein Chronjob ist eine gute Idee. Dann wäre es aber auch besser ein 
kleines Shellscript zu verwenden, oder auf Perl, bzw C 
zurückzugreifen (wobei C hier wohl ein wenig zuviel des Guten 
wäre). Dort hast Du jeweils keinerlei Probleme mit Timeouts.

[1] 

function aenderungsPruefung($datei, lastmodified){
 var $datei // Name der Datei;
 var $lastmodified // Timestamp aus der Datenbank
    if (filemtime($datei) > $lastmodified) {
	return TRUE;
    }else{
	return FALSE;
    }
}

Ich hoffe Dir irgendwie geholfen zu haben, oder zumindest eine 
kleine Anregung gegeben zu haben.

> Grüße aus dem Süden
Viele Grüße aus dem Norden
Thorsten

- -- 
Thorsten Körner     |e-Commerce-Consulting  |e-Commerce-Software
Dannenkoppel 51     |http://www.123tk.com   |Marketing-Software
D-22391 Hamburg	    |Spezial-Hosting	    |Usability-Proof
t.koerner at 123tk.com |CMS / Redaktionssysteme|Beratung & Schulung
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux)

iD8DBQFAc9Egs5R35vLkl/cRAjp/AJsHfZHjowqmYmZiUcUFIFWZBGxHMQCgmSBg
sR9w2r4sAVy/dsMCKrioQq4=
=v2GB
-----END PGP SIGNATURE-----

php::bar PHP Wiki   -   Listenarchive