brano88 je napisao:
Znam. Volim da ostavljam kontroverzne postove.

Please, stop. Nemoj. Just nemoj.
Eudaimonia je napisao:
Spring, Hibernate i ostali Java frameworks, koji se koriste u aplikacijama za rad sa bazom podataka, su katastrofa iz pogleda svakog administratora baza podataka
brano88 je napisao:
E bas bih volio da cujem objasnjenje za ovu izjavu.

Zato sto koriste ORM (object-relational mapping) i "layers of abstraction", generisuci jako SPOOOOORE upite ka bazi podataka.
X-puta sam dobio zadatak da analiziram tzv. problem "baza je spora", kada je u igri neka aplikacija bazirana na Javi i nekom od tih frejmworka. I svaki, ali bas svaki put se ispostavi da se baza dosadjuje, a da 90-95% vremena otpada na Java dio i network latency...
Sjecam se jednog sastanka, gdje je shef IT departmenta pozvao sve kljucne ljude, jer je kod jedne kriticne finansijske aplikacije doslo do eskalacije zbog jednog "batch joba", koji je ranije trajao od 22:00 do 06:30, ali sad traje do 06:50-06:55, a MORA!! da bude gotov najkasnije u 08:00!
I nakon sastanka oformio se "task force" da se nadje problem i naravno da se otkloni...
Svi programeri kazu da nisu nista mijenjali u aplikaciji.
Network administratori kazu da nista nisu dirali u mreznim podesavanjima.
System administratori kazu da nista nisu mijenjali na sistemu.
Application manager kaze da u strukturi podataka nije nista mijenjano.
Dakle, ne moze biti ni do cega drugog, nego do baze podataka - slozise se svi oni.
E, necete majcini sinovi tako.
Zasucem rukave i bacim se na skupljanje svih informacija, potrebnih za analizu tog problema:
- Java programer kaze da su u igri Java Hibernate framework i Tomcat application server
- network administrator mi rece da application server preko dva firewalla pristupa serveru na kojem pici baza podataka
- system administrator mi kaze da je verzija OS stara 3 godine
- application manager mi rece da aplikacija u sustini funkcionise tako, da se preko application servera podaci dovlace pojedinacno iz baze (a ukupno ima da se obradi preko 2 000 000 recorda), obradjuju se i onda spermaju nazad u bazu
A moja baza na najnovijoj verziji i sa zadnjim patch setom, bez suvisnih komponenti (hint za Oracle strucnjake: chopt) i sa namjenski tjuniranim podesavanjima.
Navece sam implementovao tracing od originalne Java aplikacije, da vidim sta se tacno odvija u bazi tokom izvrsavanja tih operacija.
Tu noc je taj batch job ocekivano trajao do 06:50.
A u trace fajlu se nalazilo 90% wait events "
SQL*NET message from client" i "
SQL*Net message to client".
Prosjecno trajanje JEDNOG poziva ka bazi, dovlacenje podataka, obrada i spremanje u bazu je iznosilo oko 17 milisekundi. "Sta je 17 milisekundi!?" - pitali bi se mnogi, ali 2 000 000 x 0,017 s = ca. 9 sati.
Da skratim pricu - taj isti dan sam sa Java developerom analizirao java klase i u roku 3 sata sam napisao Oracle PL/SQL package sa procedurama, koje obradjuju zeljene podatke - i to u batch modu!!! Ne jedan po jedan red, nego po 10000 komada u jednom ciklusu (hint: SELECT BULK COLLECT i FORALL UPDATE), a on je prepravio neke java klase, izbacio Hibernate i td.
Negdje oko 3 popodne suocim ja glavnog Java programera i shefa sa mojom analizom i predlozenim PL/SQL rjesenjem. I odobri on meni da u taj batch job implementujemo rjesenje koje koristi moj PL/SQL package (nakon testiranja u test sistemu).
Rezultat?
Start: 22:00.
Kraj: 22:14.
Prva reakcija svih involviranih je bila: "To je nemoguce, da je tako brzo gotovo!! Nesto se skrsilo, nisi dobro isprogramirao!! Sta cemo sad! Bice knap, nemamo vremena!!"
Ali, application manager je nakon kontrole rezultata uzbudjen poceo da vice na sav glas:"
Rezultati su u redu! Ljudi, sve je u redu!"
I normalno, odmah me svi odreda pocese ispitivati sta sam uradio/izmijenio, da je tako brzo bilo gotovo...
A moj odgovor je bio -
izbacen je Hibernate, a obrada podataka se obavlja DIREKTNO u bazi, bez nepotrebnog ping-ponga izmedju DB servera i application servera. Oni zinuli.
A poslije toga:
- network administrator je pored toga zakljucio, da nisu potrebna dva firewalla, nego da je dovoljan i jedan u ovom okruzenju.
- system administrator je iduci vikend odradio upgrade OS-a na najnoviju verziju.
Rezultat?
Start: 22:00.
Kraj: 22:07.
Malo sam rastegao, ali poenta je - svi ti ORM frameworks su smece. Cak ni u OLTP okruzenju nisu idealni, a kamoli u DataWarehouse sistemu...
To je kao da pijes vodu iz case tako sto ju pretaces slamkama/crijevima iz jedne case u drugu, pa u flasu, pa u tanjir i na kraju pijes sa slamkom tu vodu iz tanjira. Umjesto da ju nagnes i popijes u 2-3 sekunde.