Avatar billede s0mmer Nybegynder
15. juni 2009 - 15:52 Der er 9 kommentarer og
1 løsning

Google, Facebook mm. - Hvordan?

Hej Eksperter,

Jeg har lidt spørgsmål som jeg håber i kan svare på. Det er lidt løst, og den snak som jeg finder bedst får points. Evt. deling.

Det handler i bund og grund om større online steder såsom google, facebook osv osv.

1. Hvordan behandles så mange data så hurtigt? Et svar med indeksering rækker ikke. Jeg vil helst have det helt konkret.

2. Større sites som nævnte eks. kodet i php. Helt konkret.. Hvordan køres deres "passive" algoritmer? Altså.. hvis noget data skal udregnes om en bruger eksempelvis. Cronjob? Nej vel?

Forklar forklar forklar.. :)
Avatar billede arne_v Ekspert
15. juni 2009 - 16:10 #1
Du forventer vel ikke at faa en kopi af source code til G eller FB?

Google har aldrig offentliggjordt hvordan deres soegemaskine virker.

Baseret paa rygter saa:
- bruger den en crawler skrevet i Python
- gemmer data i deres eget fil system (GFS)
- har al data i memory fordelt paa hundredetusinder af servere spredt ud over hele jorden
- bruger deres egen web server som via smarte algoritmer ved hvilken server der har de data som spoerges efter

FB er saa vidt vides en helt "normal" web app baseret paa PHP og MySQL.

Bare i lidt stoerre skala. De siges at have 1800 MySQL servere koerende.

Men der er ikke nogle geniale snuptags loesninger til den slags. Fornuftig infrastruktur. Fornuftig database struktur. Fornuftig SQL.

Det er muligt at du synes at optimering af indexes er kedeligt, men det er altsaa en vigtig ting for stoerre databaser.

Med databaser i FB stoerrelse er partitionering nok mindst lige saa vigtig. Men som tommelfinger regel har du ikke brug for at partitionere med <1TB data (og nu kommer DBA'erne sikker efter mig fordi det naturligvis afhaenger af data, men en tommelfinger regel er jo lige netop det).
Avatar billede s0mmer Nybegynder
15. juni 2009 - 16:32 #2
arne_v > Nej jeg forventede ingen kildekode.

Jeg var samtidig heller ikke så interesseret i hvordan søgemaskinen virker. Men mere som du kommer ind på med "normale web-app's baseret på php & mysql".

Jeg takker derfor mange gange for forklaringen med databasen.

Men hvad med mit andet spørgsmål, har du et bud der?
Avatar billede arne_v Ekspert
15. juni 2009 - 18:11 #3
Jeg er ikke helt sikker paa hvad du leder efter med spoergsmaal 2.

Beregnede data kan beregnes naar der er brug for dem eller de kan beregnes med bestemte tidsintervaller.

Det afgoerende i den sammenhaeng er vel om data skal vaere 100% uptodate hele tiden.

Hvis noget skal beregnes en gang i doegnet er cron vel helt fint. Selvom der findes alternativer.

Taet beslaeget paa denne problem stilling er spoergsmaalet om cache (i applikationen, cache i databasen er en helt anden sag). Brug af cache kan forbedre performance rigtigt meget. Men der er nogle problemer som skal haandteres lige saa snart vi taler clustering.
Avatar billede s0mmer Nybegynder
15. juni 2009 - 18:19 #4
arne_v > Lad mig give dig et konkret eksempel..

Et brugersystem ønsker at vide noget om brugeren. Hvad han har købt, hvad han har lavet osv osv.. Systemet tjekker en masse historik igennem for således at vise det mest relevante data til brugeren når han ønsker det.

Et sådant tjek går jeg ikke ud fra skal gøres i det øjeblik en bruger ønsker at få vist noget data?

Skal disse data regnes på en gang i døgnet vha. cron? Eller hvordan fungerer det?
Avatar billede arne_v Ekspert
15. juni 2009 - 18:37 #5
En saadan rapport tror jeg man vil generere on the fly.

antal brugere x antal mulige soegninger er saa stort at det vil vaere haabloest at pregenerere dem.

Hvis det vil belaste online systemet for meget, saa replikerer man data til et DWH og koerer sine rapporter mod dette.

Nogle gang emed en lidt anden tabelstruktur som er mere gearet mod rapporter.
Avatar billede s0mmer Nybegynder
15. juni 2009 - 18:45 #6
arne_v > Hmm bare lige så vi er helt enige..

Så når brugeren "Tester13" klikker på "Køb varer", så genereres de relevante varer on-the-fly. Dette kunne foregå ved at tjekke tidligere køb, søgningener, visninger osv osv..

I mit hoved vil det komme til at køre ret tungt?

- Såfremt vi er enige nævner du DWH som en løsning, kan du kort forklare/introducere dette?
Avatar billede arne_v Ekspert
15. juni 2009 - 19:18 #7
DWH er en loesning for back office brug - du vil slaa et eller andet op omkring en bruger.

Salget af groenne sodavandsis fordelt paa maaneder for de sidste 3 aar hvis det er betakt med credit card.

Ingen grund til at ramme online databasen med den slags crap.
Avatar billede arne_v Ekspert
15. juni 2009 - 19:23 #8
At komme med forslag til koeb udfra brugerens hidtidige koeb vil nok normalt laves mod online databasen omend det sagtens kunne laves mod en readonly DWH lignende database.

Med et index paa bruger boer det ikke vaere saa tungt.

Naar du rammer svaervaegts klassen vil du putte den slags paa separate servere. Men indtil da kan du godt bare slaa det op.

At generere dem fra et batch job lyder ikke tiltalende for mig. Databasen bliver draebt hvis alle koeres samtidigt. Saa man skal til at have lavet noget schedulering som koerer brugerne paa forskellige tidspunkter. Lidt besvaerligt.

Og hvis brugerne logger ind 5 minutter efter at have koebt en dims vil de nok foretraekke at der vises tilbehoer til den dims.
Avatar billede s0mmer Nybegynder
15. juni 2009 - 19:39 #9
arne_v > Jeg takker mange gange. Dine svar har været nyttige. Send venligst et svar, så du kan få dine fortjente points. Og god aften :)
Avatar billede arne_v Ekspert
15. juni 2009 - 21:02 #10
svar
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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