Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Search - sto tacnije uz sto manje opterecenje servera - mozda malo java - ajax...

[es] :: PHP :: Search - sto tacnije uz sto manje opterecenje servera - mozda malo java - ajax...

[ Pregleda: 894 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mls

Član broj: 210388
Poruke: 64
*.adsl-a-6.sezampro.rs.



+3 Profil

icon Search - sto tacnije uz sto manje opterecenje servera - mozda malo java - ajax...04.05.2010. u 18:03 - pre 170 meseci
Vac je bilo diskusija o ovome, citao sam i ovde i na drugim forumima ali ima nekih stvari koje mi jos uvek nisu jasne.

Recimo da tabela koja nas intreseuje sadrzi podatke o slikama (sajt je kolakcija fotografija npr.) Za svaku sliku postoji ime, velicina, rezolucija, ko je okacio, opis, title, tagovi, datum kada je okacena, datum slikanja i jos niz podataka koji se mogu pronaci u exif polju.
Pretraga bi se radila zasebno po tagovima, opisu, datumu itd... ili vise krierijuma zajedno.
Tu dolazimo do upita.
$query = "SELECT id, name, date, author FROM image WHERE upper(name) like '%NESTO%' OR upper(author) like '%NESTODRUGO%'";
Ili nesto slicno tome... Da li ima nesto na sta treba da obratim paznju prilikom prisanja upita a da ce smanjiti opterecenje servera?

Sledece je paginacija i broj upita. Recimo da je ogovor na upit ukupno 40 rezultata/slika. Zadao sam limit, prvih 10 komada po upitu tj. strani. Za sledecu stranu pretraga pocinje od poslednje slike iz predhodne pretrage. To znaci da cu imati 4 upita. Ali ako stavim 20 po strani bice 2 upita, madjutim pretraga ce trajati duze jer se vise slika obradjuje u jednom upitu.
Palo mi je na pamet da sajkrijem 10 rezultata od tih 20 pa da klikom na stranu 2 sakrije prvih 10 a prikaze narednih (do tada sakrivenih) deset. Plus da pri tom posalje zahtev preko ajax-a za sledecih 20, pa klikom na trecu stranu da se ponovi postupak sakrivanja i prikazivanja. Na taj nacin bi onaj ko pretrazuje imao utisak da se sve odvija brze.. sto je vrlo dobro ako vec server nije google snage. :)
Primera radi sam naveo 40 rezultata, verovatno ce biti vise... mozda 50-100-500...

To su neka moja razmisljanja... Voleo bih da cujem od iskusnih sta je najbolje uciniti i kako najpametnije uraditi pretragu konkretno u ovom slicaju sa slikama.

Hvala.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: Search - sto tacnije uz sto manje opterecenje servera - mozda malo java - ajax...04.05.2010. u 18:40 - pre 170 meseci
Ako sam te dobro razumeo, onda mi nije jasno zašto polaziš od ukupnog broja upita koji će biti izvršeni za vreme pregledanja rezultata pretrage od strane nekog posetioca. Ti ćeš i dalje imati samo jedan upit u jednom HTTP zahtevu, tačnije, pri tom izlistavanju neke od stranica sa rezultatima pretrage.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: Search - sto tacnije uz sto manje opterecenje servera - mozda malo java - ajax...04.05.2010. u 19:01 - pre 170 meseci
btw Ako su ti baš toliko važne performanse kod tog upita za pretragu, onda možda možeš da razmisliš i o keširanju rezultata pretrage tog nekog "expensive" upita...

Ideja je da odradiš taj upit "jednom za svagda", tačnije za tu jednu sesiju u kojoj će korisnik pregledati rezultate. Npr. nakon što korisnik iz browser-a pošalje neki upit za pretragu, ti mu u sesiji dodeliš neki unique id, koji ćeš koristiti i za id keša (tekstualni fajl, ili nešto naprednije, npr. APC, svejedno), u koje ćeš smestiti rezultate pretrage, a onda bi implementacija paginacije bila jako jednostavna, i svodila bi se na utiliziranje array_slice() funkcije, budući da potrebne podatke već imaš u tom nekom nizu koji je u kešu. Dakle, nema limitiranja, komunikaciju sa bazom radiš samo jednom.

A kad taj isti korisnik opet pokrene pretragu, onaj stari keš brišeš, kreiraš novi, i tako u krug.
 
Odgovor na temu

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.mbb.telenor.rs.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: Search - sto tacnije uz sto manje opterecenje servera - mozda malo java - ajax...04.05.2010. u 19:09 - pre 170 meseci
Moj savet - ne kreci od optimizacije :)

Napravi prvo da pretraga radi, da si siguran da nema sigurnosnih propusta (sql injection et al.) i da je korisniku udobno i intiuitivno da koristi tu pretragu :)

Sto se tice optimizacije: mozes indeksirati kolone koje se najcesce koriste tokom pretrage, mozes kesirati rezultate upita. Dobro isprojektuj bazu i tabele.

Npr, ti si u svom malom primeru SQL-a, koristio "upper(name) like '%NESTO%'" - ako encoding te kolone postavis na, recimo utf8_general_ci, taj upit ce ti vratiti pogodak i za nesto, NESTO, Nesto, NeSto, posto ono ci na kraju oznacava case insesitive. Tako da ti to upper nije ni potrebno i eto ti odmah optimizacije, jedan poziv funkcije manje :)
 
Odgovor na temu

mls

Član broj: 210388
Poruke: 64
*.adsl-a-6.sezampro.rs.



+3 Profil

icon Re: Search - sto tacnije uz sto manje opterecenje servera - mozda malo java - ajax...04.05.2010. u 20:01 - pre 170 meseci
Uradio sam pretragu, radi odlicno, i post i get prolaze 2 escape funkcije. Sada bih da smanjim vreme cekanja da se razultat dobije. Ako mora prvi put da se ceka druze, kontam da sa ajax funkcijom na nacin opisan iznad smanjim vreme cekana za ostale strane. Zanima me sta mislite o tome, da li je dobro resenje ili moze bolje? Ili mozda da se uopste ne zamaram sa tim.. :)
Ovo za encoding cu da iskoristim. Hvala. ;)

U pisanju sam krenuo od ukupnog broja rezultata samo primera radi i da bi bolje objasnio ovo sa ajax-om. Naravno da se po jedan upit izvrsava, klikom na sledecu stranu izvrsava se drugi... a mozda bi mogao da se izvrsava treci a drugi da bude ukljucen u prvi pa sa js (css) hidden/show prikazuje i sakriva. Razmisljao sam i o kesiranju, to cu sigurno uraditi kada kroz neko vreme pregledam statistiku i utvrdim sta se najvise trazi.
U dilemi sam dakle, da li da radim ajax kao sto sam objasnio ili ne. Mnogi ce naci ono sto traze vec na prvoj strani, pa kontam da slanje dva puta vise rezultata nego sto se prikazuje na jednoj strani (prikazani i skriveni) mozda bude kontra od onoga sto hocu da postignem.
Ovako grubo... da li duze traje 10 upita po 10 rezultata ili 5 upita po 20 rezultata? Za istu tabelu i iste reci za pretragu.

Jos nesto. Na stranici gde se prikazuje slika, postoji deo gde je prikazano jos slika od istog autora i drugi deo gde su slicne slike (ime, opis, tagovi). Za sada se to prikazuje tako sto se svaki put pravi upit (na osnovu imena slike koja se prikazuje) za pretragu tabele. Verovatno bi ovde kesiranje bilo korisnije, pa kad smo kod njega.. dajte neki savet ili link kako da izvedem.
 
Odgovor na temu

[es] :: PHP :: Search - sto tacnije uz sto manje opterecenje servera - mozda malo java - ajax...

[ Pregleda: 894 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.