Avatar billede dna Nybegynder
08. juli 2001 - 22:51 Der er 57 kommentarer og
3 løsninger

Database-opbygning til stor side !?

Hejsa alle...

Jeg håber, at der er en eller flere kloge hoveder, som kan hjælpe mig med et lille problem. Det kræver nok at I tænker jeg om, hvis I ikke har arbejdet med dette før ... men, her kommer det:

Jeg vil med en side som chart.dk som forbillede, lave en side, som kan holde statistik over en masse andre sider. (sådan som chart.dk fungerer) ...men, men, men.. hvordan skal jeg lave database opbygningen !? I skal tænke på, at man skal kunne gå tilbage til en speciel dag og så se timefordelingen over sine besøg den dag... dvs. der skal registeres en masse ?

Hvis hver besøg skal registeres som en post i en database vil der jo lynhurtigt komme MANGE 1000 poster, som kan tage lang tid at søge i ....

Håber at kunne få noget hjælp, eller i det mindste en god diskussion!!!!

dna
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 22:54 #1
Hvis du bruger, og det er nok et must på sådan et stort site, mySQL eller MS SQL så vil søgning i en tabel med 1.000.000+ records ikke tage mange sekunder, alt efter om det er tekst eller tal søgning.

Desuden hvis du har et index på et felt gør det søgning langt hurtigere, har jeg ladet mig fortælle, men har ikke prøvet det selv da jeg ikke har lavet nogle store sites.
Avatar billede dna Nybegynder
08. juli 2001 - 22:56 #2
tdaugaard: Hvis vi kigger på chart.dk - deres nr. 1 bruger er dating.dk med omkring 65000 besøg pr. dag... de vil så lave lige knap 2.000.000 poster pr. måned! Hvis vi så siger, at de lige vil 1 år tilbage, så er det pludselig mange poster..!?

dna
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 22:58 #3
Hvis du vil kunne lave en komplet statistik som Chart.dk er du nødt til at lave en post for HVER besøgende.

\"sites\" tabel:

id - url - ejer info osv.

ID -> hits.site (relation) hvis der bruges en Access/MS SQL DB (ved ikke om mysql kan lave relationer)

\"hits\" tabel:

id - site - ip - datetime

det er en meget basic tabel, som jo sagtens kan udvides med alandsens sjauw.
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:00 #4
dna:> det er man jo nødt til :-/ ellers kan du ikke lave en ordentlig statisik.
Avatar billede jakobandersen Nybegynder
08. juli 2001 - 23:00 #5
Stadigvæk er det den eneste løsning... Ofte laver vi på min arbejdsplads et backup pr. 50.000.000 poster og sletter så disse poster fra databasen.. Hvis vi så senere skal bruge dataene smider vi den CD vi skal bruge i Drevet og smider dataene ind i SQL Serveren igen.
Avatar billede Slettet bruger
08. juli 2001 - 23:01 #6
Du skal benytte dig af normaliseringsform 1, 2 og 3 måske endda 4 så dine databaserelationer bliver så effektive som mulige.

Derved undgår du for mange tupler.

PS
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:02 #7
Vil da egentligt lige smide et svar ..
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:03 #8
Normalisering ... hvad faen er\'t det er ?
Avatar billede htx98i17 Professor
08. juli 2001 - 23:06 #9
aaahh, 1.000.000 poster er sq mange. Mener at have hørt fra alvion at et index på et felt kan svare sig at lave når der er mere en 10 eller 100.000 poster i db\'en...
Avatar billede htx98i17 Professor
08. juli 2001 - 23:08 #10
jeg har forgæves prøvet at lede efter det spm jeg læste det i...
Avatar billede jakobandersen Nybegynder
08. juli 2001 - 23:09 #11
schulze-> Normaliseringen er ikke der hvor hovedvægten skal lægges.. Jo mere Normalisering des mere Kodning/Joins. Jeg finder som regel at Boyce-Codds normalform er passende til webapplikationer.

tdaugaard-> Ved du ikke hvad normalisering er? Det håber jeg for holdbarheden af dine websteders skyld. Læs evt. http://support.microsoft.com/support/kb/articles/q100/1/39.asp for en lille intro.

Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:11 #12
moonduck:> nopes, aner ikke hvad normalisering er ...
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:15 #13
Hmm .. men jeg kan se at selvom jeg ikke aner hvad det er har jeg åbenbart en lidt medfødt evne for normalisering for jeg kan se ud fra et af eksemplerne (anden normalform tror jeg) så er det noget jeg selv har lavet før, altså den slags normalform ..
Avatar billede jakobandersen Nybegynder
08. juli 2001 - 23:20 #14
Det smarte ved normaliseringen er jo at man hvis istedet for at have en tabel som denne:

Spørgsmål    Bruger
Hvordan....    moonduck
Hvorfor...    moonduck

Har en som denne:

Spørgsmål    BrugerID
Hvordan...      55
Hvorfor...
Avatar billede jakobandersen Nybegynder
08. juli 2001 - 23:22 #15
Hov fik lige trykket for hurtigt:


Det smarte ved normaliseringen er jo at man hvis istedet for at have en tabel som denne:

Spørgsmål    Bruger
Hvordan....    moonduck
Hvorfor...    moonduck

Har en som denne:

Spørgsmål    BrugerID
Hvordan...      55
Hvorfor...      55

BrugerID    Navn
55            moonduck


Og hvis moonduck så skifter brugernavn skal det ikke rettes i alle spørsmål men blot i brugertabellen.


I mange af de databaser jeg har haft fingre i kan man f.eks. skifte firmanavnet på alle sider bare ved at ændre i databasen.
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:27 #16
moonduck:> ka sagtens følge dig :-)
Avatar billede Slettet bruger
08. juli 2001 - 23:31 #17
Jeg kan anbefale bogen: \"Fundamentals of Database systems\" Emasri Navathe
Avatar billede dna Nybegynder
08. juli 2001 - 23:33 #18
Er sådan et system fuldstændigt umuligt at køre på en Access database ???

dna
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:38 #19
TOTALT! Access kan slet ikke klare den slags trafik.
Bare dating.dk vil lave i gns. 45 poster hvert minut 24/7... det kan Access slet ikke klare i længden.
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:39 #20
Desuden er Access jo langsom som bare f.... fordi alle tabeller ligger i samme databasefil hvorimod MS SQL/mySQL har een fil pr. tabel.
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 23:40 #21
Og jeg kunne lige forestille mig en ORDER BY eller WHERE ... på en tabel med over 1 mio. eller måske endda 20 mio. poster ... *veeeentetid*
Avatar billede dna Nybegynder
08. juli 2001 - 23:48 #22
Jeg lavede lige lidt Access-test:

At indsætte 2 random-tal (et 4-cifret og et 5-cifret) tager ca. 3 sek. for at indsætte 500 poster... !?! (dette er self. i en løkke, og ikke nye scripts hver gang..)

dna
Avatar billede dna Nybegynder
08. juli 2001 - 23:49 #23
Kan man i mySQL / MS SQL ikke oprette tabeller direkte i sin kode!?!?! Så kunne man måske oprette enkelte tabeller til hver side ?!?!

Ville det ikke være en idé ??

dna
Avatar billede jakobandersen Nybegynder
08. juli 2001 - 23:52 #24
Ja det kan man godt med SQL Syntaksen Create table... Men at have flere tabeller vil sikkert være mere sløvende end at have få tabeller med mange poster. (pga. SQL Serverens caching osv.)
Avatar billede dna Nybegynder
08. juli 2001 - 23:59 #25
moonduck: hvad så med at have f.eks. de først 500 sider i en tabel og fra 500-1000 i en anden tabel osv. ?

dna
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 00:07 #26
Vil det ikke blive besværligt tror du ?
Avatar billede jakobandersen Nybegynder
09. juli 2001 - 00:13 #27
Apropos.. Nu når der var nogle der nævnte dating.dk, selv de store har ofte problemer med Databasen. Se http://groups.google.com/groups?hl=da&safe=off&th=cb55133eba6b0225,42&start=0&ic=1
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 00:18 #28
fååårk mand ... det er database der vil noget ;-)
Avatar billede dna Nybegynder
09. juli 2001 - 01:19 #29
I sover sikkert nu, men skal vi tolke det forløbige resultat på mit problem sådan her:

1. Fuck Access (Bruger nok mySQL)
2. Lav hver besøg som en post
3. Hvad er 3. punkt !?

dna
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 01:24 #30
svarer direkte til det første:
Du sletter bare gamle records i databasen længere er den ikke vel?...
Eller opret et timesheet med de 24 timer hvor man så vælger et ud fra dagen og hvis der ikke er noget opretter man et nyt!
det er meget enkelt =)
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 01:26 #31
dna:> Sover ? Hvad vil det sige ? ;-)

Yes, yes.

Well, #3 må vel være normalisering af databasen således at du opnår den bedst mulige optimering af tabeller osv.

Jeg kunne forestille mig måske een tabel til IP\'ere (id - IP) og een til hits således at du kan tælle både unikke og pageviews, uden at have duplicate IP\'s i \"hits\" tabellen.
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 01:26 #32
dark-nisse:> Joo .. det kommer jo an på hvor lang tid tilbage man skal kunne se statistik.
Avatar billede jakobandersen Nybegynder
09. juli 2001 - 01:29 #33
1. Du har sikkert ikke brug for avancerede ting som subselects o.lign. derfor er mySQL et glimrende valg da denne er ekstrem hurtig (Til et bestemt punkt)men netop mangler nogle af de mere avancerede funktioner. Men på den anden side vil mySQL i en realworld applikation med mange hits begynde at blive noget tung at danse med ved omkring ca. 2 mio records. Andre alternative valg kunne derfor være PostgreSQL eller Sybase ASE 11 (Begge gratis svjh.)

2. Vil tro det er det rigtige, men lav evt. nogle benchmark tests på databasen hvor du leger med tabelstørrelse normalisering osv.

3. Hvis du virkelig satser på at lave et holdbart projekt finder du tegnedrengen frem og køber en Oracle som sparker så meget ... at du ikke tør drømme om det. (Hvis nogle siger DB2 nu så kig lige på: http://www.oracle.com/features/9i/index.html?ad_benchmark.html )
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 01:30 #34
så lav det timesheet, det er den bedste løsning og så skal man kun oprette 1 om dagen! =)
man skal vel ikke kunne se hver eneste aktive bruger forhelvede men bare antal!.........
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 01:31 #35
moonduck:> Oracle .. er det ikke noget frygteligt svært noget ?
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 01:31 #36
Moonduck man køber først den slags når det andet ikke er nok! personlig har jeg en oracle licens men aldrig brugt den.....
sql server er passende mysql fin!
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 01:32 #37
oracle er ikke svært bare dyrt! og når noget er dyrt er det tidskrævende, right?
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 01:32 #38
dark-nisse:> snak da ordentligt!
Hvis du skal lave ordentlige statistikker skal du bruge en post til HVER besøgende.
Du kan selvfølgeligt også lave een post med felter der bliver lagt 1 til, men så kan du ikke lave en \"peak-time\" statistik!
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 01:34 #39
dark-nisse:> Nej, ikke nødvendigvis. Jeg har hørt om Oracle programmører .. at man ligefrem skal programmere \"databasen\" .. dunno, men når noget er dyrt behøver det ikke at være tidskrævende.
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 01:34 #40
hmmm peak-time? what the &%#? er nu det?
Avatar billede jakobandersen Nybegynder
09. juli 2001 - 01:35 #41
tdaugaard>> Nej oracle er ikke svær.. Det kræver blot at man sætter sig lidt ind i tingene.

dark-nisse>> Hvis man bygger databasen fornuftigt op og kender forskellene mellem de to DBMS\'er man skifter mellem kan man godt konvertere..

Men ofte er et databaseskift lagt i hænderne på de forkerte lig med datatab eller meget tid offline. Men selvfølgelig er det muligt at gøre korrekt, men hvis man har pengene er det nemmere at købe det rigtige udstyr fra starten.

<dårlig sammenligning>
  Det er jo som bekendt også svært for schumacher at skifte racerbilen ud mens den kører, og stadig vinde løbet.
</dårlig sammenligning>
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 01:36 #42
dark-nisse:> Peak-time; det tidspunkt hvor der er flest \"hits\" i en given periode.
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 01:39 #43
hehe! not funny!
men hvis hans side ikke går så godt som mange portaler desvære ikke gør, er det dumt at stå med en oracle licens! det er på den måde mange går konkurs bruger penge som ikke er nødvendige!
erindrer at jubii var nede i 2 dage da de skiftede server\'ne ud...
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 01:41 #44
tdaugaard.....
Jo det er der jo i timerne! er det ikke nok? har man mere på chart???.....

<Dark Nisse>
Avatar billede dna Nybegynder
09. juli 2001 - 01:52 #45
Sorte-Nisse: Jeg fatter ikke helt hvad du mener, men måske den er god nok... skær lige ud i pap for mig.. ?? plz

dna
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 01:58 #46
hehe hvis du vil slippe for en overfyldt db kan du lave et table i mysql:
med et felt for alle 24 timer (de kan nok ikke hedde fx:1)...

så når en bruger kommer ind putter han 1 til databasen på det pågældenede tidspunkt fx 12:00...
så kan du klare dig med 365 pr side pr år! ikke 500.000.000.000.000.000 og der vil ikke blive overbelastning!...

På denne måde kan du nemt give statestik evt lave et felt for hits idag hvor der bliver talt hvis han ikke har været der før! (tip: cookies til hele lortet)......


er det nok?
Avatar billede jakobandersen Nybegynder
09. juli 2001 - 01:59 #47
dark != Sorte
dark == Mørk


Man laver når dagen er slut en opsamling af data pr. time dvs. hvert site max kan have 24 poster pr. dag dvs:

24 * 365 = 8760 records pr. år pr. site

Og for chart.dk med 28719 sites vil det sige MAX 251 mio. records pro anno.

Dette tal er langt mindre da det er langt fra alle sites på chart.dk der har en besøgende pr. time.
Avatar billede dna Nybegynder
09. juli 2001 - 02:01 #48
Tja... den idé tror jeg faktisk, at jeg vil arbejde lidt på! Men, kan man på den måde også tjekke alle mulige andre ting !? Når man ikke logger IP osv. så kan det være svært at opdage snyd !??

dna
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 02:07 #49
24? du skal da have alle 24 i en tabel.........

kan chart holde øje med snyd???...

Dem der snyder afslører altid sig selv...
Avatar billede jakobandersen Nybegynder
09. juli 2001 - 02:14 #50
Okay nu fatter jeg ikke hvad det er du vil dark-nisse.... Kan du ikke prøve at forklare dig lidt nærmere evt. tegne dit forslag til en databaseopbygning.

Du vil altså lave 24 kolonner pr. site  og kun tælle antal hits pr. time pr. site?
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 02:25 #51
det er måden at gøre det han vil på jo!....
dna har du fattet det?...

du kan evt smide et felt mere i og tælle pr dag! lægge dem sammen og få pr uge, måned, år what ever... han kan lave meget mere end man skulle tro , jeg hjælper ham bare ind på det ubeviste...
Avatar billede dna Nybegynder
09. juli 2001 - 03:26 #52
Jeg er ikke sikker, men jeg prøver at rodde med det i denne uge, så hvis det bøvler, så kommer jeg lige tilbage...

dna
Avatar billede dna Nybegynder
09. juli 2001 - 03:29 #53
forresten.. er det et problem, hvis jeg starter i Access... (Indtil der kommer f.eks. 100 brugere - da jeg ikke har mySQL endnu på mit website!)

dna
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 04:05 #54
Hmm .. måske ikke, det kommer an på hvor mange besøgenede de 100 sites har.
Avatar billede dark-nisse Nybegynder
09. juli 2001 - 04:32 #55
start du bare med access!... når det bliver nødvendigt opgraderer du bare...
Avatar billede tdaugaard Nybegynder
09. juli 2001 - 04:35 #56
dna:> Hmm .. men, men .. spørgsmålet er om du vil sidde og skulle lave databasen om til mySQL når den tid kommer .. der er jo både konverteringen men også evt. SQL kald der skal laves lidt om...
Avatar billede dna Nybegynder
08. august 2001 - 01:48 #57
Vil bare lige sige til alle, at jeg ikke har glemt dette spm, men da siden ikke er færdig, ville jeg lige vente lidt... håber det er ok!

dna
Avatar billede tdaugaard Nybegynder
08. august 2001 - 01:54 #58
hmm .. eeej .. synes godt du kan lukke nu du har fået dit svar. Vi behøver vel ikke vente på at sitet kommer op at køre?
Avatar billede dna Nybegynder
08. august 2001 - 10:29 #59
nnæ... det kan du vel nok have ret i ... men, selvom det var dark-nisse der kom med det bedste svar, så har jeg alligevel valgt at dele point´ene ud efter deltagelse....

dna
Avatar billede tdaugaard Nybegynder
08. august 2001 - 10:36 #60
fint :-) og tak :)
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
Kurser inden for grundlæggende programmering

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