Mysql
 sql >> база данни >  >> RDS >> Mysql

Обединяването/задържането на OpenJPA е много бавно

Можете да опитате да стартирате транзакцията преди итерацията и след това да я извършите след това в рамките на една транзакция. Така че по същество създавате партида, която ще бъде обединена/продължена при комит.

Освен това можете да ограничите броя на обектите в пакета, които трябва да се обработват наведнъж, и можете изрично да изтриете промените в базата данни.

Тук вие инициирате транзакция и я извършвате във всяка итерация, а също така създавате/затваряте мениджър на обекти всеки път, ще повлияе на производителността за множество данни.

Ще бъде нещо като кода по-долу.

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

Тук можете също да връщате назад цялата транзакция, ако някой от обектите не успее да се запази/слее.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL индекс за MIN и MAX

  2. Как да актуализирам две таблици в едно изявление?

  3. дизайн на база данни за викторина с различни езици

  4. Django:Небуферирана mysql заявка

  5. Импортирайте голям csv файл в mysql база данни с помощта на php