sql >> Database >  >> RDS >> Mysql

Het samenvoegen/aanhouden van OpenJPA gaat erg traag

U kunt proberen de transactie vóór iteratie te starten en deze daarna binnen een enkele transactie vast te leggen. Dus eigenlijk creëer je een batch die zou worden samengevoegd/aangehouden bij commit.

U kunt ook het aantal objecten in een batch dat tegelijk moet worden verwerkt, beperken en de wijzigingen expliciet in de database doorspoelen.

Hier initieert u een transactie en voert u deze in elke iteratie uit en ook elke keer dat u entiteitsmanager maakt/sluit, heeft dit invloed op de prestaties voor tal van gegevens.

Het zal zoiets zijn als onderstaande code.

em = factory.createEntityManager();
em.getTransaction().begin();
int i = 0;

   for (Object ob : list) {
       Long start = Calendar.getInstance().getTimeInMillis();

       em.merge(ob);

       Long end = Calendar.getInstance().getTimeInMillis();
       Long diff = end - start;
       LOGGER.info("Time: " + diff);

       /*BATCH_SIZE is the number of entities 
            that will be persisted/merged at once */

       if(i%BATCH_SIZE == 0){    
           em.flush();
           em.clear(); 
       }

       i++;
   }

em.getTransaction().commit();
em.close();

Hier kunt u ook de hele transactie terugdraaien als een van de objecten niet blijft bestaan/samenvoegt.




  1. Maximaal aantal kolommen / waarden dat u in een tabel kunt INSERT - mysql

  2. mySQL-kolom om array te bevatten

  3. Verander tabel/kolom/index namen grootte in orakel 11g of 12c

  4. Installeer Oracle Client vanaf de opdrachtregel zonder tussenkomst van de gebruiker