ugrás a tartalomhoz

Felhasználók hozzászólás számának kiírása fórumban

Anonymous · 2006. Jan. 14. (Szo), 02.24
Hellósztok!

Tanácsot szeretnék kérni.
Ha csinálok egy fórumot és tegyük fel hogy van benne 100ezer hozzászólás.
Ami egy táblában van az adatbázisban.

És lenne egy olyan rész hogy felhasználónként hogy neki eddig mennyi hozzászólása van. Na de most ezt hogy oldjam meg?
2 lehetőséget mértem fel:
- vagy megszámolom h hány hozzászólásom van mindenegyes oldalhíváskor csak akkor van szivacs ha egy oldalon mondjuk 30 különbzőt kell megszámolni
- vagy mikor új hozzászólás van akkor +1-el növelem mikor törlöm akkor -1-el csökkentem.

Nos szerintetek mit válasszak mert azért 100 ezer sor az nem semmi és mindig megszámolni vagy elég gyors a php?
pl. ha mindenkinek van 1 512kbps-s netje, akkor sokat kell várnia hogy a php számoljon?

Előre is köszönöm a válaszokat.
 
1

Count()

Jano · 2006. Jan. 14. (Szo), 05.51
Szia! Nem kell a PHP-ra bízni, az adatbáziskezelő pillanat alatt megmondja.

SELECT count(*) FROM hozzaszolasok WHERE userid = 12;
A sávszélességgel meg nem függ össze az, hogy a szerveren mennyit kell dolgozni, legfeljebb úgy, hogy akinek nagyobb sávszélje van esetleg gyakrabban tudja lekérdezni az oldalt.
2

100.000

Edit · 2006. Jan. 14. (Szo), 10.08
Százezer nem olyan sok. A MySQL-t millió soros adattáblákra fejlesztették. Egyébként egyszerűen lehet tesztelni: leveszel valami jó hosszú e-könyvet a netről (Tolsztoj - Háború és béke), írsz egy kis szkriptet, ami feldarabolja és beteszi az adatbázisba, mintha fórum hozzászólások lennének. Aztán rákeresel szavakra, és mindig kiíratod a szkript futási idejét.

Másik, talán egyszerűbb lehetőség, hogy a megváltoztatod a PHP-ben a maximális lefutási időt. Alapbeállítás: 30 másodperc. Meg lehet változtatni a php.ini fájlban, vagy set_time_limit() függvénnyel. Ha azt látod, hogy nem tud befejeződni a keresés mondjuk 5 másodperc alatt, akkor baj van, újra kell gondolni az egész fórumot.
4

30 másodperc...

janoszen · 2006. Jan. 14. (Szo), 12.51
A 30 másodperc a PHPban kizárólag a SCRIPT futtatásával töltött időre vonatkozik. Az azon kívüli időre nem! Persze, senki nem akarna 30 másodpercnél többet várni. :)
3

Indexeles

Grandmaster · 2006. Jan. 14. (Szo), 10.55
A Jano megoldasat alkalmazzak altalaban mindenhol, es persze nem szabad megfeledkezni az indexelesrol sem. A userid legyen index, es akkor mindjart nem 100000 sort kell vegigvizsgalnia.

A tesztelest meg igy oldd meg:
EXPLAIN SELECT count(*) FROM hozzaszolasok WHERE userid = 12;
5

slow query log

Edit · 2006. Jan. 14. (Szo), 14.17
Bocsi, most látom, hogy félreértettem a kérdést. Tehát a lassú MySQL lekérdezések felderítése, elemzése:

Slow query log és EXPLAIN SELECT
6

<Nincs cím>

Anonymous · 2006. Jan. 15. (V), 01.41
Okse kössz a válasz, tehát akkor neféljek attól hogy lassú lesz, ok rendben.
7

?

Edit · 2006. Jan. 15. (V), 02.23
Nem ezt mondtuk - hanem azt hogy optimalizálj, keresd meg a szűk a keresztmetszeteket, és tesztelj, mielőtt élesben felteszed.
8

Mérj

Jano · 2006. Jan. 15. (V), 10.15
Nagyon egyszerűen kiderítheted, hogy lassú-e vagy sem. Az adott kódrészlet előtt és után is lekéred az időt, majd a különbséget kiiratod.