jeg_lyver_mye Skrevet 14. august 2007 Del Skrevet 14. august 2007 Hei, Jeg driver og lager et forum på hobby. Jeg har lyst at dette forumet skal tåle svært mange brukere og poster uten at det skal bli noe tregere av den grunn. Da tenkte jeg på å blande MySQL og filer. Jeg har laga meg en klasse i PHP som gjør om matriser til PHP kode, slik at jeg kan bare inkludere dem og begynne å bruke det med en gang. Så når en bruker registrerer seg så lager jeg mappen: ./data/user/u/s/e/username/userdata.php. (/u/s/e/ <-- de første tegnene i brukernavnet .) I fila er dataen lagret slik: PHP <?php $user['username'] = array( 'signature' => 'signature til bruker', 'nickname' => 'kallenavn!', 'numposts' => 5479 ); ?> Jeg skiller mellom brukernavn og kallenavn. Kallenavn vises på forumet, brukernavn er for å logge seg inn. Så når jeg da henter postene til en tråd så skjer følgende: PHP <?php // Definerer en array for å se om vi har inkludert før, // slik at vi ikke inkluderer fler ganger! $loadedUsers = array(); // MySQL spørring, henter alle postene til tråden while ($row = mysql_fetch_object($result)) { if (!isset($loadedUsers[$row->user_id])) { // user_url <-- hele stien til brukeren er allerede lagret i posten! Slik // at vi trenger å lage den for vær gang denne loopen kjører. include_once('./data/user/' . $row->user_url . 'userdata.php'); // Lagrer bruker i $loadedUsers for å ikke hente han fler ganger. Han er her! $loadedUsers[$row->user_id] = true; } // Begynner å printe ut post og brukerinfo echo 'post: ' . $row->post; echo 'signatur: ' . $user[$row->username]['signature']; echo 'kallenavn: ' . $user[$row->username]['nickname']; echo 'kallenavn: ' . $user[$row->username]['numposts']; } ?> Samma info kommer til å være lagre i MySQL i tilfellet det går galt et sted. Så spørsmålet mitt blir da om dette er totalt meningsløst og idiotisk? Funker det, er det raskere? Noen som kan gjøre seg opp noen tanker? Jeg kan så lite om hvordan PHP behandler filer og hvordan MySQL takler data etc. Men leser jeg på nett så sliter jo manger forum når de blir veldig store! Så funker dette bra, eller dårlig med tanke på stabilitet og hastighet? Tusen takk! Også postet her: http://norskwebforum.no/viewtopic.php?p=254000#254000 Lenke til kommentar
Martin A. Skrevet 14. august 2007 Del Skrevet 14. august 2007 Når du alt henter noe ifra SQL, hvorfor ikke hente det der samtidig? Er ikke uten grunn at IP.Board, vBulleting og phpBB ikke har gjort noe lignende allerede. Og grunnen er at det ikke fungerer like bra i praksis, som i teorien. Lenke til kommentar
jeg_lyver_mye Skrevet 14. august 2007 Forfatter Del Skrevet 14. august 2007 Så det er allerede prøvd? Og det fungerte dårlig? Lenke til kommentar
slippern Skrevet 14. august 2007 Del Skrevet 14. august 2007 Hent det ut fra sql =) driver og lager en side med brukere å profiler. alt blir hentet ut fra mysql. prøvde med flatliler, men filene blir litt vell stor etterhvert Lenke til kommentar
jeg_lyver_mye Skrevet 14. august 2007 Forfatter Del Skrevet 14. august 2007 Hver bruker han sin egen fil. Og det er ikke mye data i dem, kun det som er nødvendig for en post. Lenke til kommentar
Ueland Skrevet 14. august 2007 Del Skrevet 14. august 2007 Skikkelige gode systemer bruker skikkelig caching, OOP kode og fornuftig oppsett For Vikingboard har jeg implementert filcache basert på MySQL-data, samme er implementert her på Diskusjon.no Uten ekstra filcache hadde ting blitt bra tregt. Man kan hverken ha alt i DB eller alt i fil, det vil ikke gå i lengden. Lenke til kommentar
slippern Skrevet 14. august 2007 Del Skrevet 14. august 2007 foresten. hvor lurt er dette? Så når en bruker registrerer seg så lager jeg mappen: ./data/user/u/s/e/username/userdata.php. (/u/s/e/ <-- de første tegnene i brukernavnet ) visst brukeren heter abc_!)#- så vidt jeg vet så går det ikke ant at navnet på en mappe inneholer spesialtegn. Lenke til kommentar
jeg_lyver_mye Skrevet 14. august 2007 Forfatter Del Skrevet 14. august 2007 Det er vel det minste problemet? Jeg kan jo bare tillate tall, bokstaver og _ - som brukernavn. Lenke til kommentar
jeg_lyver_mye Skrevet 14. august 2007 Forfatter Del Skrevet 14. august 2007 Ok, jeg har nå testa forskjellen! Brukt joins i mysql mot filene. Da snakker vi om 150 poster.. og 1 post fra vær bruker.. altså 150 poster. MySQL var dobbelt så rask på dette. Takk for svar. Måtte nesten få dette inn med te-skje! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå