Halihallo Andreas
Cookies, die an den Server gesendet wurden? - Wenn ja, dann hab ich ein weiteres Problem: Ich hab (zumindest derzeit) keinen Zugriff auf die Konfigurationen.
Du wirst jawohl nicht die Besucher Deiner Kunden zwingen einen externen Cookie zu akzeptieren, oder? Das ist nicht gut, da da die meisten Browser meckern!
Das ist mir bewusst. Aber die Statistik fordert es. Entschuldigung, aber darüber lass ich nicht mit mir streiten; es ist so und so muss es einfach akzeptiert werden! - Ich bin ja sonst nicht so abweisend, aber hier bringt's wirklich nix, wenn man mir sagt, dass dieses Cookie Zeug schlecht ist. Mich regen die Cookies auch auf und mir ist bewusst, dass sich Cookies deaktivieren lassen.
Nennen wir diese Cookie-Geschichte einfach Axiom der Webapplikation. Axiome sind Grundeigenschaften, die sich nunmal nicht ändern lassen.
Ich weiß jetzt nicht genau was die Kunden bei sich einbinden müssen aber welche Daten ziehst Du aus dem Cookie, abgesehen davon das es nicht erlaubt ist Cookies außer Sessioncookies ohne Vorwarnung zu setzen!
Es sind "Sessioncookies". Eindeutige Identifikation der Kunden. Entschuldige, aber ich darf hierzu nicht mehr sagen, zumindest nicht bevor wir am Markt etabliert sind. Ich darf hierzu keine Internas preisgeben (ich würde zwar gerne...).
durch den Apache, auch den Request-String ggfs. mit Parametern, später um 4:00 morgens kann das dann ein PERL-Script per Cron analysieren. Spar Dir doch den einen Zwischenschritt da dieser Deine Perfomrance extremst ausbremst!
Das versuche ich bereits nach bestem Wissen und bester Möglichkeit. Dadurch konnte ich die Performance schon wesentlich verbessern (man denke nur an die mysql-Datenbankzugriffe, die wegfallen).
Aber sauber mit den 10.000 flat-files ist das auch nicht. Vor allem warum machst du rand()? ich würde evtl microtime() verwenden, halt für jeden zugriff ne exra file, und am Ende alle Dateiname in dem Verzeichnis in einen Array laden und dann in einer Schleife die Dateien auslesen und in MySQL schreiben und löschen!
Das funktioniert auch genau so (nur eben mit rand) :-)
Warum rand? - Weil microtime 1) nicht gibt in perl (Time::HiRes wäre hier vielleicht brauchbar) und 2) weil rand auch bei zwei gleichzeitig eintreffenden Requests mit sehr grosser Wahrscheinlichkeit eine völlig andere Zahl liefert, was bei microtime nicht der Fall wäre.
Zudem sind die 10'000 Dateien nur dazu da das Request-Logging auf verschiedene Dateien zu verteilen, um so den Traffic auf eine Datei kleinzuhalten, sodass sich die Prozesse nicht in die Haare kriegen. Natürlich wird auch bei jeder Datei noch gelockt und entlockt; aber wenn man die Requests auf verschiedene Dateien verteilt, ist die Wahrscheinlichkeit kleiner, dass überhaupt der Zugriff auf eine Datei verweigert wird, wenn sie von einem anderen Prozess bearbeitet wird. Na, ja, ihr seht, ich hab das so Programmiert, dass ich auch bei 1'000'000 Requests pro Sekunde gute Karten habe :-))
Bei einem Request pro Sekunde hättest Du gerade mal gut doppelt so viele files wie mit Deinem System, mit dem Unterschied das das mit dem Zeitpunkt sehr viel genauer ist! Immerhin passen dann statt 12 Requests 1 Mio Request in eine Sekunde, wenn Du in die Region kommst ist Bill Gates gegen Dich ein Gartenzwerg ;-) Aber wenn Du Angst hast das trotzdem eng wird kannst Du ja noch rand dazu nehmen, und den String noch länger machen ;-)
Natürlich wäre es möglich für jeden Request eine eigene Datei anzulegen (als unique-filenames generieren), aber das halte ich für etwas übertrieben... Ich will ja nicht Statistiken über das ganz Web anlegen :-)
Ich will dem Billi nicht mal konkurrieren :-)
Aber bestünde nicht die Möglichkeit das Du die Cookiedaten irgendwie in den Request bekommst? Ich meine die Daten sind ja schon auf der Homepage da, aber Du kannst wahrscheinlich an dieser Stelle keine Scriptsprache verwenden, oder?
genau. Der Kunde soll keine Scripts bei sich installieren müssen, oder sonstige Spässe über sich ergehen lassen. Das einzige was er soll, ist ein simpler Tag in seine Page setzen; da der Cookie von meinem Progi generiert wird, wird er auch nur für meine Domain sichtbar => mit JS auf dem Kundenserver ist da auch nix zu machen.
am besten wäre ein transparentes gif welches geladen wird und der Apache einen Eintrag in einer angepassten Log macht. Aber das reicht nicht, oder?
Was ich brauche ist eigentlich nur die aktuelle Zeit und der Cookie. Dürfte also mit dem angepassten Log machbar sein. Ich denke, dass ich dies auch machen werde, wenn die Serverfarm steht und ich Zugriff auf die Konfig hab.
Aber was müssen die Leute bei sich einbindn, damit überhaupt was geloggt wird?
Ein kleiner HTML-Code mit JS-Script Einbindung (dass der eigentliche Referer der Kundenwebsite eingebunden werden kann; und eine Timestamp an das Bild angehängt wird, um das Client-Caching möglichst zu verhindern) und einem transparenten <img>, das auf das tag-script auf meinem Server zeigt.
Viele Grüsse
Philipp