批量作业交易

时间:2011-10-11 20:57:28

标签: batch-processing

让我们说数据库中有100条记录用于批处理作业,当批处理作业运行并获取那100条记录然后开始处理时。在进程中,如果第10条记录发生错误,那么我应该回滚所有已经处理过的9条记录。

我们如何设计这个场景?欢迎您的建议。

3 个答案:

答案 0 :(得分:0)

可能存在不同的事务粒度。 Java(JTA)允许在单个提交中进行多次写入。

  1. 打开交易
  2. 写记录
  3. 写记录
  4. 写记录
  5. 错误
  6. 回滚
  7. 大多数数据库还支持可处理多行或记录写入的事务。

    这很常见。

答案 1 :(得分:0)

我相信你问如果,如果在批量处理过程中发生错误,你应该回滚成功的记录。

您希望在每个事务提交或回滚后,以一种使数据库记录保持一致且合法(相对于数据库和业务规则)的方式在事务中进行数据库更新。

如果100个记录列表中的每个项目都可以单独处理和记录,那么我建议使用某种标志(也可以是状态字段)来指示是否已经处理了每个记录,然后遍历记录以更新每个记录。如果您遇到错误,请注意某处(日志文件,例外,错误表...您的电话)并继续。完成后,您将记录哪些记录成功以及哪些记录失败。然后,您应该能够返回并修复导致错误记录问题的任何问题,并重新处理跳过的记录。

如果您的所有100条记录必须同时成功或失败,那么您需要将更新包装在一个事务中,以便它们全部成功或失败。这将适用于数十条记录或(可能)数百条记录,但尝试在同一事务中扩展到数千条记录可能会产生可伸缩性问题(性能和争用问题),因此您需要为模式提供不同的解决方案那样的。

答案 2 :(得分:0)

看看SAVEPOINTS - 它们基本上允许内部交易。所以你可以做很多工作,做一个SAVEPOINT,做更多工作,只回滚到最后一个保存点。如果出现问题,你可以回滚整个交易。