我有一个由SQL数据库支持的Spring Boot OLTP应用程序。
我有一项任务是根据SQL db中的数据构建不同的报告(统计信息)。要求之一是报告必须准确且彼此一致。
但是,对db的查询获得了进一步处理所需的所有必要数据,其中包括许多基于范围的查询和AVG函数。
排除幻像读取的最直接方法是使用SERIALIZABLE
隔离级别,但是由于在生产环境中,这样的报告生成可能要花费数小时,因此将数据库锁定这么长时间是很麻烦的。
从我的角度来看,创建快照并进一步从快照中读取数据会很棒,但是如果我手动进行快照,则将是ITL过程,我必须事先知道所有报告所需的所有数据。
对我来说,这个问题应该广为人知。
您能建议我解决这种问题的另一种方法吗?
UPD:
@Transactional(readOnly = true, isolation = Isolation.SERIALIZABLE)
在这种情况下可以工作吗?