Как исключить фантомные чтения в длительных процессах? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть приложение Spring Boot OLTP, поддерживаемое базой данных SQL.

У меня есть задача создавать различные отчеты (статистику) на основе данных в базе данных SQL. Одним из требований является то, что отчеты должны быть точными и соответствовать друг другу.

Но запросы к БД, которые получают все необходимые данные для дальнейшей обработки, включают в себя множество запросов на основе диапазона и функции AVG.

Самый простой подход для исключения фантомных чтений заключается в использовании SERIALIZABLE уровня изоляции, но, поскольку в производственной среде такая генерация отчетов может занять несколько часов, это является катастрофой - блокировка БД при записи на столь длительное время.

С моей точки зрения, было бы здорово создать снимок и выполнить чтение из снимка, но если я сделаю это вручную, это будет процесс ITL, и мне нужно заранее знать все данные, необходимые для всех отчетов.

Мне кажется, что проблема должна быть широко известна.

Не могли бы вы посоветовать мне другой подход к такой проблеме?

UPD: @Transactional(readOnly = true, isolation = Isolation.SERIALIZABLE) работает в таком случае?

...