Andreas Korthaus: "Lösung"

Beitrag lesen

Hi!

Ich habe den log-parser geschrieben und konnte einige Testläufe machen. Festgestellt habe
ich, dass das parsen gar nicht das Problem ist, selbst wenn die ganze log geparsed wird
(was ich der Einfachheits halber vorerst und wohl auch künftig so löse/gelöst habe). Die
Zeit, die für das Parsen gebraucht wird, beläuft sich auf durchschnittlich 15-20
Sekunden, was für etwas mehr als 200MB (habe mich verlesen) zwar langsam, aber akzeptabel
ist.

Findest Du? Wenn ich die Selfsuche verwende(PERL-CGI) hat sie gerade bei einem Test 200 MB Daten in:

"Dauer der Suche: 4.703125 sec usertime, 0.7890625 sec systemtime"

ich hoffe mal nicht dass die 0,8 Sekunden die komplette Zeit ist die hier benötigt wird, denn sonst versinke ich gleich im Boden ;-)

Bedenke dass das eine Volltext-Suche ist(ich habe nach 3 Worten gesucht), das brauchst Du ja nicht, Du könntst die Daten mittels einer Datenbank ja direkt in ein möglichst kleines Format bringen(IPs: FLOAT oder LONGINT), Datum in DATE, dann hättest Du nur noch den Hostnamen wo Du dann einen String-Vergleich bräuchtest.
Dazu noch entsprechende Indices(muss man mal ein bisschen mit EXPLAIN versuchen bis man für jede Query den optimalen gefunden hat)

Das sollte dann vermutlich schneller sein.

Das wohl zeitintensivste ist eindeutig das Auffinden der unterschiedlichen IP's,
dieser Algorithmus gilt es zu verbessern und wie das geht ist im Netz gut beschrieben
(sortierte Listen, begrenzter Look-Back, wie beschrieben, ...). Hatte ich leider nicht
bedacht...
Zudem bringt ein vorgeschaltener Filter für die URL eine starke Reduktion der Datenmenge,
was sich ebenfalls performant auswirkt.

Ja, alles raus was Du nicht brauchst, gerade bei der Datenmenge macht sich das bemerkbar!

PS: Sorry für die frühzeitige Belästigung :-)

Ach ... ;-)

Grüße
Andreas