在长期的过程中如何排除幻像读取?

时间:2019-06-27 17:00:12

标签: java sql transactions isolation-level

我有一个由SQL数据库支持的Spring Boot OLTP应用程序。

我有一项任务是根据SQL db中的数据构建不同的报告(统计信息)。要求之一是报告必须准确且彼此一致。

但是,对db的查询获得了进一步处理所需的所有必要数据,其中包括许多基于范围的查询和AVG函数。

排除幻像读取的最直接方法是使用SERIALIZABLE隔离级别,但是由于在生产环境中,这样的报告生成可能要花费数小时,因此将数据库锁定这么长时间是很麻烦的。

从我的角度来看,创建快照并进一步从快照中读取数据会很棒,但是如果我手动进行快照,则将是ITL过程,我必须事先知道所有报告所需的所有数据。

对我来说,这个问题应该广为人知。

您能建议我解决这种问题的另一种方法吗?

UPD: @Transactional(readOnly = true, isolation = Isolation.SERIALIZABLE)在这种情况下可以工作吗?

0 个答案:

没有答案