15. juni 2009 - 15:52Der 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?
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).
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?
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.
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?
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?
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.
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.