Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Scalanie/utrwalanie OpenJPA jest bardzo powolne

Możesz spróbować rozpocząć transakcję przed iteracją, a następnie ją zatwierdzić w ramach jednej transakcji. Więc w zasadzie tworzysz partię, która zostanie scalona/utrwalona po zatwierdzeniu.

Możesz także ograniczyć liczbę obiektów w partii, które mają być przetwarzane na raz i możesz jawnie opróżnić zmiany do bazy danych.

Tutaj inicjujesz transakcję i zatwierdzasz ją w każdej iteracji, a także tworzenie/zamykanie menedżera encji za każdym razem, co wpłynie na wydajność wielu danych.

Będzie to coś takiego jak poniższy kod.

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

Tutaj możesz również wycofać całą transakcję, jeśli którykolwiek z obiektów nie zostanie utrwalony/scalony.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wiele instrukcji IF w MYSQL

  2. Optymalizacja logiki MySql

  3. Interfejs bazy danych GUI MySQL

  4. Zdalne połączenie MySQL nie powiodło się z nieznaną metodą uwierzytelniania

  5. Uruchamianie wielu zapytań w MySQL bez użycia podzapytania