Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Migracja tabel sekwencji Spring Batch MyISAM do InnoDB

Potwierdziłem, że sama zmiana tabel sekwencji MyISAM na InnoDB powoduje utworzenie blokad aktualizacji na tabelach sekwencji po update...set...=last_insert_id() oświadczenie, ale przed dokonaniem transakcji. Blokady te nie są tworzone podczas korzystania z sekwencji MyISAM. Tak więc „łatwe” podejście może mieć negatywny wpływ na wydajność.

Oto, co wymyśliłem. Nie jestem pewien, czy jest to najłatwiejszy sposób, ale działa.

  1. Na to odpowiedz, usuń istniejące tabele sekwencji i przedefiniuj je za pomocą pojedynczej kolumny uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
  2. Utwórz procedurę składowaną, która:a) przyjmuje nazwę sekwencji jako argument, b) wstawia do sekwencji i c) zwraca LAST_INSERT_ID()
  3. Napisz klasę Java, która rozszerza MySQLMaxValueIncrementer i wywołuje procedurę składowaną w getNextKey() metoda. Używam SimpleJdbcCall przykład, aby to zrobić.
  4. Napisz klasę Java, która implementuje DataFieldMaxValueIncrementerFactory i zwraca instancję z kroku #3 z getIncrementer() metoda
  5. W konfiguracji wsadowej zaktualizuj org.springframework.batch.core.repository.support.JobRepositoryFactoryBean konfiguracja do użycia fabryki inkrementatorów z kroku #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. Dane wielu zapytań w jednej tabeli HTML (PHP, MySQL)

  2. jak mogę stworzyć system tagowania używając php i mysql?

  3. Mysql - zaktualizuj kolumnę tabeli z innej kolumny na podstawie zamówienia

  4. PDO, $_GET i wybieranie z bazy danych MySQL

  5. tworzenie tabeli mysql z połączenia wewnętrznego