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

स्प्रिंग बैच MyISAM सीक्वेंस टेबल्स को InnoDB में माइग्रेट करना

मैंने पुष्टि की है कि केवल MyISAM अनुक्रम तालिकाओं को InnoDB में बदलने से update...set...=last_insert_id() के बाद अनुक्रम तालिकाओं पर अद्यतन ताले बन जाते हैं। बयान लेकिन लेनदेन से पहले प्रतिबद्ध किया गया है। MyISAM अनुक्रमों का उपयोग करते समय ये ताले नहीं बनाए जाते हैं। तो "आसान" दृष्टिकोण प्रदर्शन पर नकारात्मक प्रभाव डाल सकता है।

यहाँ मैं क्या लेकर आया हूँ। सुनिश्चित नहीं है कि यह सबसे आसान तरीका है, लेकिन यह काम कर रहा है।

  1. प्रति यह उत्तर दें, मौजूदा अनुक्रम तालिकाओं को छोड़ दें और उन्हें एक कॉलम के साथ फिर से परिभाषित करें uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
  2. एक संग्रहीत कार्यविधि बनाएं जो:a) अनुक्रम नाम को तर्क के रूप में लेता है, b) अनुक्रम में सम्मिलित करता है, और c) LAST_INSERT_ID()
  3. देता है
  4. एक जावा वर्ग लिखें जो MySQLMaxValueIncrementer का विस्तार करता हो और संग्रहीत कार्यविधि को getNextKey() . में कॉल करता है तरीका। मैं एक SimpleJdbcCall . का उपयोग कर रहा हूँ ऐसा करने के लिए उदाहरण।
  5. एक जावा वर्ग लिखें जो DataFieldMaxValueIncrementerFactory को लागू करता है और चरण #3 से getIncrementer() . से एक उदाहरण देता है विधि
  6. बैच कॉन्फ़िगरेशन में, org.springframework.batch.core.repository.support.JobRepositoryFactoryBean को अपडेट करें चरण #4 से वृद्धिशील फ़ैक्टरी का उपयोग करने के लिए कॉन्फ़िगरेशन



  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. स्क्रैच से पायथन फ्लास्क और MySQL का उपयोग करके एक वेब ऐप बनाना:भाग 5

  4. प्रदर्शन के बीच MySQL क्या है ..?

  5. अन्य RDBMS में OUTER APPLY का एनालॉग (SQL सर्वर नहीं)