Avatar billede orca Nybegynder
07. april 2006 - 18:09 Der er 5 kommentarer og
2 løsninger

DB Design til statistik

Hey

Jeg 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?
Avatar billede Slettet bruger
08. april 2006 - 07:01 #1
Det bliver vel under alle omstændigheder

datamængde = antal_sider * 24 * 360 * år

når du vil have time statistik. Men løsningen er under alle omstændigheder at aggrererer køre noget aggregering.

Når der nu er tale om web statistik hvorfor så ikke bruge en af de mange statistik pakker som findes i forvejen og som har løst problemet. Det gør også at dine brugerer ikke skal trækkes med at eksekverer logning heletiden da det alligevel foretages af web server.

Kig på http://awstats.org/ (open source) det er et rimeligt godt system og hvis du gerne vil lave din egen ting så kan du måske finde noget inspiration til den praktiske implementering ved at kigge på dette projekt.
Avatar billede arne_v Ekspert
09. april 2006 - 04:34 #2
hvorfor er 2.5 millioner rækker om måneden umuligt ?

lad os sige at en række fylder 100 bytes inkl. overhead, så vokser din database
med 250 MB om måneden eller 3 GB om året

ikke noget problem
Avatar billede arne_v Ekspert
09. april 2006 - 04:35 #3
det er så rådata

når du skal til at analysere data så skal vi over i noget datawarehouse
(OLAP kuber måske)

men det ligger uden for min viden
Avatar billede arne_v Ekspert
19. juni 2006 - 01:44 #4
orca ??
Avatar billede orca Nybegynder
19. juni 2006 - 01:59 #5
Beklager, jeg har det med at glemme indlæg da jeg ikke bruger exp så ofte som jeg plejede at gøre :(

Jeg endte med en løsning som følger x*24*365*år devisen. Der bliver lavet en fuldt eksplicit log til en midlertidig tabel i løbte af dagen. Om natten køres så et aggregeringsscript som tømmer den midlertidige tabel og gemmer det aggregerede data i en storage tabel som der bliver læst fra ved statistikvisning/queries.

Hvis i lægger svar begge to så deler jeg points.
Avatar billede arne_v Ekspert
19. juni 2006 - 02:08 #6
ok
Avatar billede Slettet bruger
19. juni 2006 - 07:11 #7
;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester