Мне нужно удалить миллионы строк из таблицы из таймера EJB. Проблема заключается в том, что таймер имеет тайм-аут транзакции 90 секунд, поэтому я должен разделить работу на куски размером с укусом.Удалить огромное количество строк из таймера EJB
Поскольку я не знаю, сколько строк можно удалить за 90 секунд, алгоритм должен зацикливаться и удалять несколько за раз, пока время почти не достигнет.
Проблема в следующем: Как можно удалить количество строк для удаления в JPA? Удаление выполняется во всех строках, имеющих временную метку раньше определенной даты.
Я думаю, что можно найти 1000-й старейший ряд и DELETE WHERE timestamp <= {1000th-oldest-row.timestamp}
Это, однако, не очень элегантно, и мне нужно будет добраться до последней строки в 1000, чтобы получить метку времени.
Во-вторых, таймер должен срабатывать сразу же, если таблица не очищается после 90 секунд. Это легко решить, но, опять же, не очень элегантно.
Ну, транзакции решены для меня в моем ограничении. Но ваше решение красиво. – Hugo
Спасибо Hugo за ваш комментарий. –