Enige tijd geleden ben ik begonnen met het bouwen van een statistieken-script voor mijn website. Tot nu toe gaat alles voorspoedig: via een javascript bestandje verzamel ik informatie over de bezoeker en stop deze in een MySQL database. Momenteel kan ik de volgende statistieken uitlezen:
Tot zo ver was alles vrij makkelijk. Maar ik kom er nu achter dat de echte uitdaging bij heen statistiekentool is, om de database beheersbaar te houden. Met een 100 bezoekers per dag neemt de omvang van zo'n database door het vastleggen van de klikpaden al vrij snel toe. Het is geen optie om de klikpaden dan maar niet vast te leggen, want dan verlies ik ook statistieken als "aantal bezoekers op maandag" en "aantal pageviews tussen 22:00 en 23:00 uur". Het dilemma is: hoe minder je opslaat hoe beter beheersbaar, maar hoe ongedetailleerder de statistieken.
Dus zat ik eraan te denken om een stats_archive tabel te maken. Eens per maand lees ik dan de stats_paths tabel uit, en sla hiervan een samenvatting op in stats_archive. Vervolgens gooi ik de tabel leeg:
Mijn vragen:
- procentuele verdeling van gebruikte OS, browser, resolutie, etc.
- clickpad van alle bezoekers, met IP, host en totale tijd op site doorgebracht
- oude bezoeken van gebruikers en aantal keer dat een bezoeker al eerder hier geweesr is (dankzij een cookie)
- aantal pageviews en populairste pagina's
- verdeling van de bezoekers over de tijd
code:
De tabel stats_index is de hoofdtabel. Hier komt elke sessie in te staan. Bij elke sessie sla ik op welke browser, os, etc de bezoeker gebruikt. Ook lees ik een cookie id op, zodat ik kan zien of de bezoeker met deze sessie al andere sessies op de site heeft gehad. Bij elke klik controleer ik of de sessie al in stats_index staat. Zo ja, dan sla ik de klik op in stats_path, zodat ik later het klikpad kan bekijken. Ook wordt stats_hits geupdate, zodat ik aan het aantal hits kan zien welke pagina het meest populair is.1
2
3
4
5
6
7
8
9
10
11
| stats_index stats_hits stats_paths ----------- ---------- ----------- sid title sid session location location cookie hits referrer ip title host created palette resolution os browser |
Tot zo ver was alles vrij makkelijk. Maar ik kom er nu achter dat de echte uitdaging bij heen statistiekentool is, om de database beheersbaar te houden. Met een 100 bezoekers per dag neemt de omvang van zo'n database door het vastleggen van de klikpaden al vrij snel toe. Het is geen optie om de klikpaden dan maar niet vast te leggen, want dan verlies ik ook statistieken als "aantal bezoekers op maandag" en "aantal pageviews tussen 22:00 en 23:00 uur". Het dilemma is: hoe minder je opslaat hoe beter beheersbaar, maar hoe ongedetailleerder de statistieken.
Dus zat ik eraan te denken om een stats_archive tabel te maken. Eens per maand lees ik dan de stats_paths tabel uit, en sla hiervan een samenvatting op in stats_archive. Vervolgens gooi ik de tabel leeg:
code:
etcetera. De kolom "browsers" is dan een varchar. De waarde kan ik ophalen en exploden. Dan kan ik uitlezen dat 10 bezoekers IE 6 gebruikten, 15 bezoekers FF 1.0, etc. Het voordeel is dat de database klein blijft en weinig onderhoud vergt. Nadeel is dat ik bv. geen oude bezoeken, bijvoorbeeld van iemand die al 5 keer op de site is geweest, kan terugkijken. Het aantal malen dat iemand op de site is geweest zal ik ook in het cookie moeten opslaan, in plaats van het DISTINCT uit de stats_index te halen.1
2
3
4
5
6
7
8
| stats_archive ------------------------ date 2005-07-12 sessions 45 ips 43 browsers 1:10 2:15 3:20 os 1:43 2:2 pageviews 472 |
Mijn vragen:
- is zo'n history tabel een goed idee / gebruikelijk
- hoe ver ga jij met het opslaan van gegevens (ook complete klikpaden?)
- hoelang bewaar jij je statistieken?
- heb je misschien tips / opmerkingen over mijn aanpak?
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."