DB Design til statistik
HeyJeg skal lave et statistik modul et website. Lad mig lægge ud med at fastslå nogle antagelser:
Statistikken skal gemmes for evigt (i praksis ~ 10 år som worst case)
1000 besøgende om dagen
80 sidevisninger pr. besøgende
Statistikken skal gå ned til timeinddeling, dvs. jeg skal kunne lave udtræk der fortæller mig hvor mange besøgende der var på side X på time Y, og naturligvis en grovere inddeling så som dage, ugedage, uger, måneder, år und so weiter.
Min normale tankegang ville være at lave en overordnet "Hit" række i en tabel når brugerens session starter. Denne række indeholder data så som ip, browser og alt det andet som kun behøves at blive logget en gang.
Hvert efterfølgende hit ville så få deres egen række i en anden tabel - med en reference til den overordnede tabel. Denne model vil give mulighed for en så find inddeling jeg har lyst til, samt for at lave en statistik som at "brugeren brugte X minutter på side Y i gennemsnit".
MEN. Denne struktur giver ved hurtig hovedregning noget nær 1000 * 80 = 80.000 rækker om dagen, eller. 2.5 millioner rækker om måneden, så det ses hurtigt at det er helt umuligt.
Jeg har også overvejet at køre med denne model, men hvor jeg hver nat laver et aggregat af dagens hits, dvs. opretter en ny række pr. dag i året hvori jeg gemmer antal sidehits, visninger osv. Men for at jeg kan finde ud af antal visninger pr. side så skal jeg have en relationsrække for hver side for hver dag, altså ender vi hurtigt ude i en for stor datamængde igen.
Hvordan gør man?