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

Мигриране на Spring Batch MyISAM Sequence Tables към 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. Напишете Java клас, който разширява MySQLMaxValueIncrementer и извиква съхранената процедура в getNextKey() метод. Използвам SimpleJdbcCall пример, за да направите това.
  4. Напишете Java клас, който имплементира DataFieldMaxValueIncrementerFactory и връща екземпляр от стъпка #3 от getIncrementer() метод
  5. В груповата конфигурация актуализирайте 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. Заключваща маса за четене и писане

  2. Как да ИЗБЕРЕТЕ записи без NULL стойности в MySQL

  3. Присъединете се към 4 таблици в SQL заявка

  4. Заменете прекъсващия ред с „\n“

  5. MySQL работи с 127.0.0.1, но не работи с localhost?