(Microsoft PowerPoint - 903_\216nidari\346_Java Persistence.pptx)

Слични документи
PHP proširenja za rad sa bazama podataka Postoje pojedinačna proširenja za različite tipove baza podataka sa svojim bibliotekama funkcija npr. postoji

Slide 1

Microsoft PowerPoint - 6. Query Builder.pptx

Introduction to Programming

1 NOVO U MNG CENTRU!!! OVLADAJTE TEHNOLOGIJOM IZRADE JAVA EE APLIKACIJA KORIŠ C ENJEM ORACLE ADF-A O - Otkrijte brzinu razvoja aplikacija sa ADF-om -

PowerPoint Presentation

Slide 1

(Microsoft PowerPoint - 412_Buni\346 HTV.ppt [Compatibility Mode])

Slide 1

PDO

PowerPoint Presentation

Fakultet tehničkih nauka, Novi Sad Predmet: ISIBP

Slide 1

PowerPoint Presentation

PowerPoint Presentation

Microsoft Word - WP_kolokvij_2_rjesenja.doc

Slide 1

4 dan - DWeb

PowerPoint Presentation

Baza podataka

R u z v e l t o v a 5 5, B e o g r a d, t e l : ( ) , m a i l : c o n t a c p s i t. r s, w w w. p s i t. r s

PowerPoint Presentation

(Microsoft PowerPoint - 902_\320ur\360evi\346 Atlassian JIRA - \232to je sve issue.pptx)

Upitni jezik SQL

Kako spriječiti petlju

Upute-podesavanj -accounta

Sveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Ba

Microsoft Word - SYLLABUS -Dinamicki

PuTTY CERT.hr-PUBDOC

UNIVERZITET U NOVOM SADU TEHNIČKI FAKULTET MIHAJLO PUPIN ZRENJANIN TEHNOLOGIJE DISTRIBUIRANIH INFORMACIONIH SISTEMA - Skripta za teorijski deo (RADNA

Slide 1

Računarski praktikum I - Vježbe 09 - this, static

Introduction to Programming

_Outlook

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

PowerPoint Presentation

(Microsoft PowerPoint Ben\232i\346.ppt [Compatibility Mode])

Slide 1

Europass CV

Introduction to Programming

PowerPoint Presentation

Projektovanje informacionih sistema i baze podataka

Biz web hosting

Modeliranje, implementacija i administracija baza podataka

Microsoft PowerPoint - 6. CMS [Compatibility Mode]

PowerPoint Presentation

Kako preziveti katastrofu

STUDIJA SLUČAJA: Konsolidacija informatičkog sustava Grada Raba siječanj, Informacijske tehnologije

Slide 1

Microsoft PowerPoint Aplikacijski moduli ISMO [Compatibility Mode]

Primenjeno programiranje - Vežbe

WAMSTER Prezentacija

PowerPoint Presentation

Cjenik_DU_2013_01_R02.indd

SVEUČ ILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br Vizualizacija prostornovremenskih podataka u desktop aplikacijskom o

Microsoft PowerPoint - LB7-2_WCCF_2010.ppt

PowerPoint Presentation

03 SUBP

Sveucilište u Zagrebu

Microsoft Word - MySQL_3.doc

UPITI NAD JEDNOM TABELOM 1. Izdvojiti šifre svih knjiga select K_SIF from K 2. Izdvojiti šifre knjiga iz tabele K uz imenovanje kolone select K_SIF as

Slide 1

Rad u mrežnom okruženju Osnove informatike s primjenom računala

Slide 1

Tutoring System for Distance Learning of Java Programming Language

MEĐIMURSKO VELEUČILIŠTE ČAKOVEC RAČUNALSTVO PATRIK MIHOCI Izrada modela za objektno relacijsko povezivanje podataka u okviru aplikacije za opis predme

DWA2

Introduction to Programming

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Microsoft Word - Java_introduction_NEW_SYLLABUS.doc

Drugi kolokvij iz predmeta Operacijski sustavi 2. srpnja Napomene: PISATI ČITKO! Zadatke 7-10 rješavati na ovom papiru ili uz njih napisati "na

Slide 1

Slide 1

PowerPoint Presentation

PowerPoint Presentation

3.Kontrlne (upravlja~ke) strukture u Javi

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

Programiranje za UNIX Okruženje unix procesa

PowerPoint Presentation

8 LINQ upiti LINQ (Language Integrated Query upit integrisan u jezik) jeste skup mogućnosti koje jezik C# i Framework pružaju za pisanje strukturirani

SigKoncBazeDrazen.PPT

QlikView Training

Database Programming with SQL kurs 2017 database design and programming with sql students slajdovi 17-1 Controlling User Access Davanje dozvole (grant

Microsoft PowerPoint - 06 Uvod u racunarske mreze.ppt

Upute za instaliranje WordPressa 1.KORAK Da biste instalirali Wordpress, najprije morate preuzeti najnoviju verziju programa s web stranice WordPressa

SINTEZA 2019 INTERNATIONAL SCIENTIFIC CONFERENCE ON INFORMATION TECHNOLOGY AND DATA RELATED RESEARCH ADVANCED COMPUTING AND CLOUD COMPUTING INTELIGENT

Microsoft PowerPoint - 01 Uvod u operativne sisteme.ppt

n50

(Microsoft Word - 509_Ljubi\346.doc)

SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A Ž D I N Josip Cesar APLIKACIJE TEMELJENE NA NoSQL I RELACIJSKIM BAZAMA PODATAKA DIPL

Introduction to Programming

Slide 1

08_03

Aster

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Microsoft PowerPoint - LB7-2_WCCF_2012.ppt

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Транскрипт:

Java Persistence API (JPA) najbolje prakse Slavko Žnidarić Beta Tau Beta slavko.znidaric@btb.hr

Vaš podatkovni sloj?

Vaš šef, DBA ili klijent?

Vi?

Uzroci loših performansi Previše upita Spori upiti Loše podešena baza podataka Loša mrežna inrastruktura

Klasifikacija upita Broj poziva 1600 1400 1200 1000 800 600 400 200 0 Statistika upita 0 200 400 600 800 1000 Prosječno vrijeme izvođenja (ms)

Razlozi Previše upita Poslovna logika Mapiranja Nedostatak keširanja N+1 select problem Spori upiti Niska selektivnost Nedostatak veznih varijabli Nedostatak indeksa Kartezijev produkt DB Lock-ovi Dizajn baze podataka

Odakle krenuti? DOHVAT Lazy Eager Join Batch Subselect CACHING 1st Level Cache 2nd Level Cache UPITI Selektivnost Bind varijable Query Cache

Dobar tuning je pitanje balansa

Lazy fetch Dafault za one-to-many i many-to-many relacije Dohvat objekta on-demand Nema mreže objekata Persistence framework kreira Proxy u Persistence Context-u (PC) ili u memoriji Lazy fetch za CLOB i BLOB tipove je poželjan Izdvajanje u zasebnu tablicu

Lazy fetch @Entity public class Account {... @ManyToOne(fetch=FetchType.LAZY) public Currency getcurrency() {...}... } List accountlist = s.createcriteria(account.class).list(); for (Account account: accountlist) { account.getcurrency().getcurrencyfullname(); } SELECT * FROM ACCOUNTS SELECT * FROM CURRENCY WHERE CURR_ID =? SELECT * FROM CURRENCY WHERE CURR_ID =? SELECT * FROM CURRENCY WHERE CURR_ID =?...

Eager fetch Obavezno konfigurirati dubinu dohvata: hibernate.max_fetch_depth razuman raspon 1-5 Koristi se OUTER JOIN NE KORISTITI sa 2 ili više kolekcije Loš kandidat za globalni plan dohvata!

Eager fetch @Entity public class Account {... @OneToMany(fetch=FetchType.EAGER) public Set<Transaction> gettransactions() {...} @OneToMany(fetch=FetchType.EAGER) public Set<PaymentOrder> getpaymentorders() {...}... } select account.*, transaction.*, paymentorder.* from ACCOUNTS account left outer join TRANSACTION transaction on account.id = transaction.acc_id left outer join PAYMENTORDER paymentorder on account.id = procuration.acc_id

Join Fetch CILJ: izbjegnuti lazy fetch kod podataka koje često dohvaćamo Izbjegava se N+1 select problem Izbjegava se nepotreban eager dohvat za ostale slučajeve EAGER fetch alternativa Query query = entitymanager.createquery( "SELECT acc " + "FROM Account acc JOIN FETCH acc.currency" + "WHERE acc.accountno = :accountno"); query.setparameter("accountno", accountno); Account acc = (Account) query.getsingleresult();

Batch fetch @Entity public class Account { @ManyToOne(...) public Currency getcurrency() {...}... } @Entity @BatchSize(size=5) public class Currency{... } List accountlist = s.createcriteria(account.class).list(); for (Account account: accountlist) { account.getcurrency().getcurrencyfullname( ); } SELECT * FROM ACCOUNTS SELECT * FROM CURRENCY WHERE CURR_ID IN (.) SELECT * FROM CURRENCY WHERE CURR_ID IN (.) E = (N / Batch Size) + 1

Caching Uključite 2nd level cache

2nd level Cache KONZERVATIVAN odabir kandidata za keširanje Malo insert/update Mnogo dohvata Nekritični podaci Podaci korišteni kod puno sesija Podaci potrebni mnogim korisnicima

Bind varijable "from User u where u.name=" + name SQL Injection Performance killer Tricky UVIJEK koristite bind varijable: Query query = session.createquery(" from User u where u.name= :name"); q.setstring("name", "Slavko");

Transakcije Ne koristiti transkacije read-only upite Reducira se korištenje entity manager-a i izbjegava locking/isolation overhead. Istina za izneneđujuće velik broj upita u sustavima @Stateless public class PaymentOrderService implements BasicService { @PersistenceContext private EntityManager entitymanager; @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public List<PaymentOrder> getpaymentorders() { List<PaymentOrder> paymentorders = entitymanager.createquery("select p FROM PaymentOrder p").getresultlist(); return paymentorders; } }

Zapisivanje JPA nije Batch Tool! redovito koristite flush i clear kod procesiranja velike količine podataka for ( int i=0; i<100000; i++ ) { for ( int i=0; i<100000; i++ ) { Account acc = new Account(...); session.save(acc); if ( i % 50 == 0 ) { session.flush(); session.clear(); } }

Analiza upita Uključite SQL output: hibernate.show_sql=true hibernate.format_sql=true hibernate.use_sql_comments=true toplink.logging.level=fine Koristite alate za nadgledanje: Oracle Enterpriser Manager, SQL Profiler, MySQL Enterprise Monitor Koristite alate za analizu upita Oracle explain plan, SQL Query Analyzer, MySQL Query Analyzer Budite friendly sa vašim DBA

Analiza upita Hibernate statistika Izuzetno korisne informacije Potrebno ju je aktivirati: Konfiguracijom: hibernate.generate_statistics Programski: sessionfactory.getstatistics().setstatisticsenabled(true) Pristup statisticici: sessionfactory.getstatistics()

Analiza upita

Baza i infrastruktura Uvijek nadgledajte bazu podataka! Da li su indeksi postavljeni korektno? U kakvom je stanju DB runtime? U kakvom je stanju infrastruktura? Connection Pool Transaction Monitor Application Server

Pitanja? Hvala! slavko.znidaric@btb.hr