[Java lista] Prepared JPA Query

Hortobágyi László laszlo.hortobagyi at dataexplorer.hu
2009. Aug. 4., K, 10:57:08 CEST


nem javás a megközelítés, de ilyen esetben az alábbi lehetőségek vannak:
- tárolt eljárásban csináld az update-insert műveletét. Az adott motor tudni fogja az optimalizált beszúrás lehetőségét
- ha nem túlságosan nagy az elemszám (300 ezer rekord még nem annyira horribilis) tárold a kulcslistát a memóriában, és java oldalon végezd el a lista ellenőrzést. Ez insert előtt egy feltöltés, insert alatt memória művelet, ezt még a java is gyorsan csinálja :)
- én pl. összevonnám a master-detail ellenőrzést egy selectbe, ennyivel is gyorsabb :)
- végezz utólagos ellenőrzést. Beolvasás egy temp táblába, majd SQL utasításokkal végezd el a tényleges adatkezelést (temp-tábla cél-tábla különbségek => új rekordok; azonos elemek => update )

Most hirtelen ennyi :)

HoLa

-----Original Message-----
From: javalist-bounces at javagrund.hu [mailto:javalist-bounces at javagrund.hu] On Behalf Of Szomor Attila
Sent: Tuesday, August 04, 2009 10:26 AM
To: javalist at javagrund.hu
Subject: [Java lista] Prepared JPA Query

Sziasztok,

CSV-bol importálni kellene adott rendszerességgel különböző törzsadat  
frissítéseket:
  1, Kell egy ellenőrzés, hogy már létezik-e, ha igen update
  2, ha nem létezett, egy másik ellenőrzés, hogy az Ő master-e létezik-e,  
ha igen felvesszük
látszőlag roppant egyszerű, két Query és egy em.persist vagy egy em.update.
Az alap kódtörzsben 5000 (WHO) kód van és ehhez egy kapcsolat 282000  
(WHO_Competencia)adatot rendelne,
ez első megközelítésben 12 órát futott ebből a CSV olvasás és parse 1.5mp  
az em.persist kb 20perc, a két select és a log kb. 11 óra 40perc.
A logból az látszik, hogy a (A vagy B)Query.setParameter(1,  
whoxWhoCom.getWhoCwho()); 0.016mp minden alkalommal, most egy első  
feltöltésnél ez
282000 * 2 * 0.016mp = 9024mp az az 150.4perc.

Ez Delphi-vel 4 prepared statement-el (2 select, 1 insert, 1 uopdate) nem  
egész 3 percig tart, gondoltam, hogy egy interpretált nyelv a közelébe sem  
érhet, de hogy ennyire nem az gáz !!!

A JPA Query-kre nem találtam prepare lehetőséget, gondoltam egyet durván  
megkerülöm az em-t aztán gyerünk prepareStatement, az update kersés  
kihagyva, csak az insert-re koncentrálva 15perc, hát ez lehangoló !!!

Hogy importáltok java-ból ???


Attila.

ORIG 12ora
----------
AQuery = em.createNamedQuery(..);
BQuery = em.createNamedQuery(..);
while (!reader.isEof()) {
   parseLine();
   AQuery.setParameter(1, whoxWhoCom.getWhoCwho());
   AQuery.setParameter(2, whoxWhoCom.getWhoSzmk());
   AQuery.getResultList();
   if ... {
     em.merge(entity);
   | else {
     BQuery.setParameter(1, whoxWhoCom.getWhoCwho());
     BQuery.getResultList();
     if ... {
       em.persist(entity);
     }
   }
   reader.ReadNextLine();
}


NEW 15p
-------
conn = ds.getConnection();
stmt = conn.prepareStatement("SELECT e.id,e.szcod FROM beavatk_szekszard e  
WHERE e.szcod = ?");
while (!reader.isEof()) {
   parseLine();
   stmt.setString(1, whoxWhoCom.getWhoCwho());
   rs = stmt.executeQuery();
   if ((rs != null) && rs.next()) {
     BigDecimal id = rs.getBigDecimal(1);
     if (id != null) {
       beavatkSzekszard.setId(id.toBigInteger());
       beavatkSzekszard.setSzcod(rs.getString(2));
     }
   }
   rs.close();
   if ... {
     em.persist(entity);
   }
   reader.ReadNextLine();
}
_______________________________________________
Javalist mailing list
Javalist at javagrund.hu
http://javagrund.hu/mailman/listinfo/javalist



További információk a(z) Javalist levelezőlistáról