sql >> Database teknologi >  >> RDS >> Mysql

OpenJPA-sammenlægning/vedvarende er meget langsom

Du kan prøve at starte transaktionen før iteration og derefter begå den bagefter inden for en enkelt transaktion. Så grundlæggende opretter du en batch, som ville blive flettet/vedvarende ved commit.

Du kan også begrænse antallet af objekter i en batch, der skal behandles ad gangen, og du kan eksplicit tømme ændringerne i databasen.

Her initierer du en transaktion og forpligter den i hver iteration, og også at oprette/lukke enhedsadministrator hver gang, vil påvirke ydeevnen for adskillige data.

Det vil være noget i stil med koden nedenfor.

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();

Her kan du også rulle hele transaktionen tilbage, hvis noget af objektet ikke fortsætter/flettes.




  1. Tilføj unik begrænsning til kombination af to kolonner

  2. Neo4j installation

  3. MySQL tæller komplekse forespørgselsresultater?

  4. Python mysqldb på Mac OSX 10.6 virker ikke