Fragen? Antworten! Siehe auch: Alternativlos
gatlings Logformat verteilt seine Zugriffe auf mehrere Zeilen, damit man Statistiken über Sachen machen kann, die man sonst nicht sehen kann. Hier ist ein Beispiel:
Hier kann man an den Zeitstempeln sehen, wie viel Zeit zwischen dem Connect und der eigentlichen Anfrage vergangen ist (und so z.B. sehen, wenn jemand nur connected, dann keine Anfrage stellt, aber die Verbindung offen hält). Für eine Referrer-Analyse. Der Nachteil ist: wenn man nach GET grept, sieht man nicht die verbindende IP-Adresse. Daher habe ich ein kleines Skript namens "acc.pl" gehackt, das das zurück zuordnet. Kein Ding, 24 Zeilen, der formatiert auch noch etwas um.@400000004482340c3386c9cc accept 33 217.20.118.153 38748 1
@400000004482340c33933d4c GET/CGI 33 /rss.xml 0 Mozilla/5.0_(Windows;_U;_Windows_NT_5.1;_en-US;_rv:1.7.10)_Gecko/20050716_Firefox/1.0.6 [no_referrer] blog.fefe.de
@400000004482340c3395d174 cgi_fork 33 62 25805
@400000004482340d27f174cc cgiproxy_read0 62 159 10101
Die zweite Aufgabe ist etwas involvierter, nämlich soll da geguckt werden, welche Links extern referenziert werden. Ich möchte sehen, wer auf meine Meldungen linkt, welche Meldungen besonders häufig verlinkt werden, und von wo sie am meisten Hits zu mir tragen. Das ist gut, weil ich so auch Missbrauch sehen kann, wie z.B. als ich neulich über 1000 Hits pro Tag von irgendwelchen Foren-Sites auf ein Bild bei mir hatte. Dieses Skript nannte ich "deep-links", und es ist ähnlich komplex, 34 Zeilen perl. So, und jetzt schaut euch mal das typische Zeitverhalten an:
Gut, die Kiste ist nicht die schnellste, und das waren die Logdaten von mehreren Tagen, ein paar MB kommen da zusammen. In C ist das deutlich komplexer, weil es da keinen System-Hashing-Code gibt, und weil man da mehr Error Checking machen muss und mehr explizit hinschreiben muss, und so ist acc.c 136 Zeilen lang, und referrer.c 190 Zeilen. Ein deutlicher Sprung in Komplexität, keine Frage, aber schaut euch das Zeitverhalten für die selben Daten auf dem selben Rechner an:perl ~/acc.pl 5.99s user 0.07s system 81% cpu 7.449 total
deep-links 1.23s user 0.06s system 17% cpu 7.560 total
Und das ist der Grund, wieso perl und co ja ganz nett sind, aber man am Ende eben doch C nehmen will.acc 0.40s user 0.05s system 78% cpu 0.574 total
referrer 0.06s user 0.02s system 13% cpu 0.573 total
Python und Ruby sind übrigens noch viel langsamer als perl, von PHP mal ganz zu schweigen.
Eine andere häufig gehörte Ausrede ist, daß das ja keine Rolle spielt, ob eine kurze Aufgabe 0.2 oder 2 Sekunden braucht, das sei ja weniger Unterschied, als man bräuchte, um sich darüber aufzuregen. Das halte ich für groben Unfug. Es gab da Studien, aber mal von mir ganz persönlich aus gesprochen: auf den Computer warten zu müssen macht schlechte Laune. Das macht sogar so viel schlechte Laune, daß die Leute sich alle paar Jahre neue kaufen, obwohl ihr alter noch prima funktioniert. Schon eine halbe Sekunde ist spürbar zu langsam. Ich habe mal mit einem Aktientrader zu tun gehabt, und der hatte für seine Software das Ziel, daß die Software schneller den Bildschirm updaten (und auf Tastendrücke reagieren) muss, als der Bildschirm für seinen Refresh braucht. Das ist jetzt viele Jahre her, daß ich mit dem Mann zu tun hatte, aber denkt mal drüber nach. Im Grunde hat er Recht. Wenn ich auf meinem Rechner 5 Megabyte Logs durchgefummelt haben will, dann ist es bei 1,8 GHz nicht vertretbar, daß ich da länger als ne Sekunde drauf waren muss.