У меня есть приложение Spring Boot OLTP, поддерживаемое базой данных SQL.
У меня есть задача создавать различные отчеты (статистику) на основе данных в базе данных SQL. Одним из требований является то, что отчеты должны быть точными и соответствовать друг другу.
Но запросы к БД, которые получают все необходимые данные для дальнейшей обработки, включают в себя множество запросов на основе диапазона и функции AVG.
Самый простой подход для исключения фантомных чтений заключается в использовании SERIALIZABLE
уровня изоляции, но, поскольку в производственной среде такая генерация отчетов может занять несколько часов, это является катастрофой - блокировка БД при записи на столь длительное время.
С моей точки зрения, было бы здорово создать снимок и выполнить чтение из снимка, но если я сделаю это вручную, это будет процесс ITL, и мне нужно заранее знать все данные, необходимые для всех отчетов.
Мне кажется, что проблема должна быть широко известна.
Не могли бы вы посоветовать мне другой подход к такой проблеме?
UPD:
@Transactional(readOnly = true, isolation = Isolation.SERIALIZABLE)
работает в таком случае?