Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

ओपनजेपीए विलय/निरंतर बहुत धीमा है

आप पुनरावृति से पहले लेन-देन शुरू करने का प्रयास कर सकते हैं और फिर इसे एक ही लेन-देन के भीतर कर सकते हैं। तो, मूल रूप से आप एक बैच बना रहे हैं जो विलय/प्रतिबद्धता पर कायम रहेगा।

साथ ही, आप एक समय में संसाधित किए जाने वाले बैच में ऑब्जेक्ट्स की संख्या को सीमित कर सकते हैं और डेटाबेस में परिवर्तनों को स्पष्ट रूप से फ़्लश कर सकते हैं।

यहां, आप एक लेन-देन शुरू कर रहे हैं और इसे प्रत्येक पुनरावृत्ति में कर रहे हैं और हर बार इकाई प्रबंधक बनाने/बंद करने से कई डेटा के प्रदर्शन पर असर पड़ेगा।

यह नीचे दिए गए कोड जैसा कुछ होगा।

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 - रिकॉर्डसेट में पंक्ति संख्या?

  2. डेटाबेस सो रहा है और अपवाद पैदा कर रहा है

  3. Sequelize . के साथ नेस्टेड संबंध

  4. 1 mysql क्वेरी से PHP/MySQL 2 'जबकि' कथन?

  5. BIRT में पैरामीटर इनपुट के बाद डेटा सेट क्वेरी को अपडेट करना