[ nezki @ 04.06.2010. 10:08 ] @
Radio sam jendu web aplikaciju koja vodi evidenciju svih uredjaja koji se koriste u jednoj firmi.
Tehnologije koje sam koristio su:
baza: Oracle
Serverska strana: PHP
Klijent strana: Ajax

Za upis u bazu i brisanje i update podataka koriscenje su procedure pozvane iz php-a. A za prikaz podataka php je selektovao podatke iz pogelda i prikazivao.

E sada treba da napravim nesto slicno, samo je baza MySql.

Pa me interesuje, neka vasa iskustva, saveti, predlozi, da li da koristim mysql poglede i procedure posto je verzija MySql >5 na serveru gde ce biti hostovana aplikacija. Mislim da li ce koriscene pogleda i procedura na serveru ubrzati rad aplikacije ili suprotno. Ili je mozda bolje da koristim klasicne mysql upite iz php-a sa JOIN varijantom?

Sta je bolje i brze od ova dva resenja?




[ mitke013 @ 04.06.2010. 13:53 ] @
Mislim da ti je mnogo bolje koristiti obican sql upit. Procedure jesu brze, ali ako ne ocekujes milion poseta dnevno, ne vredi tog masiranja.
[ Alexxandar @ 05.06.2010. 21:33 ] @
Pri kreiranju tabela možda ćeš se zapitati InnoDB ili MyISAM, ukratko InnoDB je ako imaš dosta INSERT, UPDATE operacija, dok je dok je MyISAM bolji za SELECT. Sada ti vidi šta ti je potrebnije, naravno ove razlike se iskažu tek pod malo većim opterećenjem ali ne škodi u startu biti pripremljen ;)
[ Goran Rakić @ 06.06.2010. 12:16 ] @
Ne pratim brojkama ali noviji razvoj u InnoDB bi trebalo da ovu razliku ispegla. MyISAM radi zaključavanje cele tabele i ne podržava strane ključeve.

U svom iskustvu pogled sam pravio jedino kada ima smisla da takva reprezentacija podataka postoji. Izbegavam podupite i koristim spajanja normalizovanih tabela. Po osećaju ponegde kada su čitanja česta, a promene retke ostavim i neki atribut viška (na primer stanje računa da ne bih stalno premotavao tabelu transakcija).

@mitke013: imaš li neke brojke za „procedure jesu brze“?
[ nezki @ 06.06.2010. 12:32 ] @
Generalno imam vise SELECT upita ali ja uvek koristim InnoDB, evo jednog posta gde se dobro vidi da je InnoDB puno bilji od MyIsam.
http://www.mysqlperformanceblo...m-vs-falcon-benchmarks-part-1/
Ali ono sto mene interesuje je da li je bolje da ako imam, na primer, vise tabela koje treba da joinujem, da li je bolje da u bazi napravim pogled i onda uradim select iz tog pogleda, ili da direktno iz php-a u query upit stavim sql kod.
Na primer:
Da li je bolje da u bazi napravim jedan pogled
Code:

CREATE ALGORITHM=TEMPTABLE VIEW vtracker AS 
  select 
    device.ID AS ID,
    from ((device left join assignment on(((device.ID = assignment.DEVICE) and (assignment.COMPLETED = 0))))
    left join reservation on((device.ID = reservation.DEVICE)))
    order by device.Date desc;

I onda da samo uradim:
Code:

mysql_query("select * from vtracker");

Ili je bolje da direktno iz php-a stavim:
Code:

$sql = "select device.ID AS ID,
    from ((device left join assignment on(((device.ID = assignment.DEVICE) and (assignment.COMPLETED = 0))))
    left join reservation on((device.ID = reservation.DEVICE)))
    order by device.Date desc";
mysql_query($sql);

Ili je mozda bolje da uradim vise select upita prema bazi.
[ Goran Rakić @ 06.06.2010. 12:37 ] @
Mislim da query cache radi svoj posao u oba slučaja.

Pogled kao TEMPTABLE ne omogućava update/delete. Može biti nezgodno u aplikativnoj logici objasniti CRUD operacije nad pogledom ako isti nije dobro definisan po dekomponovanim domenima.
[ nezki @ 06.06.2010. 13:03 ] @
Ja sam radio jednu aplikaciju gde je baza bila Oracle, i ceo development aplikacije se razvijao na sledeci nacin:
Developeri baze su za svaki UPDATE, DELETE, INSERT upit pravili procedure, a svaki SELECT upit se vrsio iz pogleda koje su oni pravili.
Nije bilo dozvoljena manipulacija podataka direktno iz tabela.

E sada ja radim slicnu aplikaciju ali je baza mysql i interesuje me da li da se drzim iste logike ili ne?
Baza je mala nema 5-6 tabela ali glavna tabela i history tabela(u njoj se cuvaju sve akcije korisnika aplikacije) ce imati jako mnogo zapisa (vise od milion).
I pre nego pocnem da radim moram da osmislim nacin na koji cu ubrazati rad aplikacije. Jer prva verzija te aplikacije postoji i u njoj sam koristio poglede(jedan primer pogleda vtracker ste videli) i gnerealno aplikacija radi jako sporo.
query_cache nije bio ukljucen.
[ Goran Rakić @ 06.06.2010. 13:35 ] @
Prouči plan izvršavanja upita.
[ mitke013 @ 07.06.2010. 01:49 ] @
Citat:
Goran Rakić
@mitke013: imaš li neke brojke za „procedure jesu brze“?


Ne, samo informacije iz druge ruke. Doduse, izvor mi nije narocito pouzdan, ali on tvrdi da je testiranjem dosao do toga da je procedura oko 2 puta brza nego obican SQL upit.
[ nezki @ 07.06.2010. 07:30 ] @
Znaci definitivno procedure i i pogledi?
[ agvozden @ 07.06.2010. 08:57 ] @
^ Ne verujem u to dok ne testiram...
[ vatri @ 07.06.2010. 11:24 ] @
Evo ja sam nasao neke clanke:

http://www.mysqlperformanceblo...w-as-performance-troublemaker/

http://www.mysqlperformanceblo...es-problems-and-use-practices/