[ metvsmet @ 19.05.2009. 09:05 ] @
| Pozdrav svima,
evo ovako, sta mene muci, primera radi, dajem sledeci primer,
kreirao sam tabelu latestactivity i u fajlu members.php stavio sledeci kod
Code: if(isset($_GET['userid']))
{
$userid = $_GET['userid'];
$query = mysql_query("SELECT * FROM useractivity WHERE userid = '$userid'") or die(mysql_error());
while($user = mysql_fetch_array($query))
{
echo "".$user['activity']."<br>";
}
}
sto znaci, da kada se ispise members.php?userid=4 da se dobiju svi redovi sa korisnickim ID-om 4, e sad, mene zanima sledece:
sta ako imam 20 000 registrovanih clanova, i svaki clan ima po nekih 50 poslednjih aktivnosti koje se nalaze u tabeli latestactivity, sto znaci 1 000 000 kolona u tabeli, po meni je to veoma mnogo, i zanima me ucitavanje, kakva bi bila brzina ucitavanja, isto primera radi, sta ako bi se u istom trenutku naslo 2 000 clanova na istoj stranici, kakvo bi bilo opterecenje ...
isto tako, ako moze neko da mi objasni o sledecem: video sam dosad jedno 5-10 sajtova koji kad im se pristupi izbaci MySql gresku na stranici da ne moze da se konektuje jer ima previse konekcija na MySql bazi, too many connections ...
u sustini me to najvise zanima, sta se dogadja kad je veci broj posetilaca na istoj stranici, sta se desava sa bazom, osim sto sporije ucitava, iako ne znam koliko ...
i jos jedno pitanje, da li postoji neki software ili neki sajt ili nesto trece, gde moze da se testira vasa php skripta da se vidi kako se ponasa pri vecem broju posetilaca ...
Hvala na pomoci i objasnjenjima |
[ kazil @ 20.05.2009. 08:28 ] @
Prvo, mani SELECT *, koristi SELECT ime_kolone1, ime_kolone2.
Sumnjam da ce se mysql buniti za milion redova, al' to ce vec neko da potvrdi ili opovrgne. Negde u mysqlovim podesavanjima (mysql.conf?) ima parametar koliko korisnika moze biti odjednom prikaceno na mysql server (default 100 cini mi se).
Za testiranje imas AB (Apache Bench), na Linuxima se instalira zajedno sa Apacheom, WAMP server isto sadrzi (ab.exe negde u bin folderu). Evo jedan linak za ab:
http://www.petefreitag.com/item/689.cfm
Svako dobro :)
[ vilyu @ 20.05.2009. 08:40 ] @
Prvo, promenljivu userid ne smes da stavis u query string pre nego sto je prethodno "ne ocistis" sa mysql_real_escape_string ili prostim kastovanjem u integer, u zavisnosti od tipa podataka koji ti je potreban. Time sprecavas SQL Injection napad.
Dalje, verovatno te ne interesuju sve prethodne aktivnosti u svakom trenutku, pa ces u query ubaciti neki LIMIT x, 10. Tako ces rezultate prikazivati na vise stranica u grupama od po deset.
Brzina pretrage ove tabele, ako je userid polje primarni kljuc, ili indeksirano je minimalno i ne treba da te brine zato sto nema spajanja tabela ili slicnih komplikacija. Sta ako se pojavi n korisnika istovremeno, gde je n mnogo veliki broj? Pa ako vec imas veliku posecenost, a ti ces je na neki nacin pratiti. Logovaces u neku tabelu najcesce trazene stranice (mozda cak i ukupno vreme njihovog izvrsavanja), pratices kroz neki MySQL admin najsporije upite, kontrolisaces opterecenje procesora i RAM-a servera. Primetices vec kad pocnu da nestaju resursi. Uglavnom se ta nagla velika opterecenja ne javljaju bas nenajavljena.
Niko ne moze da ti kaze koliko ce ti se usporiti pretraga baze. To mnogo zavisi od tvoje masine, podesavanja servera, toga koliko si kvalitetno napisao SQL upite, projektovao bazu. Mozes samo da pratis ponasanje.
E sad "too many connections" zavisi od podesavanja RDBMS-a (MySQL-a) i nema veze s PHP-om. Isto mozes da ga pratis kroz neke od admin alata, pa da dostelujes po potrebi.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.