-
07-07-2019 - |
题
我有基于 JBoss 和 Hibernate 的系统。我需要处理两个长操作。操作的时间可能比事务的超时时间还要长。它的操作是在两个不同的事务中持久保存多对多实体。如果出现问题,在此操作期间,我应该回滚事务的所有更改。
解决它的最佳方法是什么?
我认为,最好的方法是将所有操作合并到一个事务中,但这需要设置很长的事务超时,这对于我们的系统来说是不可接受的。
在这种情况下,许多交易的管理是否更好?我该怎么做呢?
其他提示
使用一笔交易是好的、健壮的等等。再次尝试说服您的管理员;-)
否则,我可以想到:
- 使用 更短的事务来插入更少的行,使用标记来表示“不完整””。这可能位于现有列或新列中(也许它可能位于不同的表中?)。
- 如果有事务回滚,请重试;如果您想中止整个操作,可以选择删除带有“不完整”标记的行。
- 当所有事务都提交后,您可以 打开最后一个事务,只是为了将所有行标记为“完成” (前任:
update ... where ...
)。这应该比完全插入快得多,因此事务应该足够短。
我必须在JPA中做类似的事情(通过hibernate)。我在N次交易中进行了操作而不是一次大交易。此操作很少运行 - 这是一个自动化作业 - 因此没有用户在网页上等待结果。
您希望交易需要多长时间?你期望用户等多久?您经常发生此操作的频率。也许你的要求不明确。
不隶属于 StackOverflow