我有基于 JBoss 和 Hibernate 的系统。我需要处理两个长操作。操作的时间可能比事务的超时时间还要长。它的操作是在两个不同的事务中持久保存多对多实体。如果出现问题,在此操作期间,我应该回滚事务的所有更改。

解决它的最佳方法是什么?

我认为,最好的方法是将所有操作合并到一个事务中,但这需要设置很长的事务超时,这对于我们的系统来说是不可接受的。

在这种情况下,许多交易的管理是否更好?我该怎么做呢?

有帮助吗?

解决方案

您是否可以使用JTA服务器(事务协调器)通过XA事务在多个步骤中执行事务? 此帖子有点粉丝 - 一些可能适合你的开源软件。

XA交易允许您执行一系列较小的操作和提交或者在一击中回滚它们。尝试谷歌搜索'休眠xa交易'。大多数现代RDBMS平台(MySQL 5.x,PostgreSQL,SQL Server,Oracle,DB2,Sybase等)都支持XA事务。

其他提示

使用一笔交易是好的、健壮的等等。再次尝试说服您的管理员;-)


否则,我可以想到:

  • 使用 更短的事务来插入更少的行,使用标记来表示“不完整””。这可能位于现有列或新列中(也许它可能位于不同的表中?)。
  • 如果有事务回滚,请重试;如果您想中止整个操作,可以选择删除带有“不完整”标记的行。
  • 当所有事务都提交后,您可以 打开最后一个事务,只是为了将所有行标记为“完成” (前任: update ... where ...)。这应该比完全插入快得多,因此事务应该足够短。

我必须在JPA中做类似的事情(通过hibernate)。我在N次交易中进行了操作而不是一次大交易。此操作很少运行 - 这是一个自动化作业 - 因此没有用户在网页上等待结果。

您希望交易需要多长时间?你期望用户等多久?您经常发生此操作的频率。也许你的要求不明确。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top