sql >> Database teknologi >  >> RDS >> Mysql

Migrering af Spring Batch MyISAM-sekvenstabeller til InnoDB

Jeg bekræftede, at blot ændring af MyISAM-sekvenstabellerne til InnoDB forårsager, at der oprettes opdateringslåse på sekvenstabellerne efter update...set...=last_insert_id() erklæring, men før transaktionen er begået. Disse låse oprettes ikke ved brug af MyISAM-sekvenserne. Så den "lette" tilgang kan have en negativ indvirkning på ydeevnen.

Her er hvad jeg fandt på. Ikke sikker på, at dette er den nemmeste måde, men det virker.

  1. Per dette svar, slip de eksisterende sekvenstabeller og omdefiner dem med en enkelt kolonne uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
  2. Opret en lagret procedure, der:a) tager sekvensnavnet som et argument, b) laver indsættelsen i sekvensen, og c) returnerer LAST_INSERT_ID()
  3. Skriv en java-klasse, der udvider MySQLMaxValueIncrementer og kalder den lagrede procedure i getNextKey() metode. Jeg bruger et SimpleJdbcCall instans for at gøre dette.
  4. Skriv en java-klasse, der implementerer DataFieldMaxValueIncrementerFactory og returnerer en instans fra trin #3 fra getIncrementer() metode
  5. I batchkonfigurationen skal du opdatere org.springframework.batch.core.repository.support.JobRepositoryFactoryBean konfiguration til at bruge inkrementerfabrikken fra trin #4



  1. tilføjelse af en slags automatisk stigningskolonne til en mysql-tabel

  2. Django+Postgres:aktuelle transaktion afbrydes, kommandoer ignoreret indtil slutningen af ​​transaktionsblok

  3. adfærd af indre joinforbindelse inde eksisterer sql

  4. Type mismatch:kan ikke konvertere fra java.util.Date til java.sql.Date