2

我编写了一个春季批处理,其 commitInterval 为 50。我使用的 itemReader 的 fetchSize 为 200。因此,根据我的理解,读者将获取 200 条记录,但只会提交 50 条记录。因此,每次获取 200 条记录时,将执行 4 次 50 次提交。我对么?

我的问题是我们配置了许多弹簧批次,并且可能存在多个批次同时运行的情况。如果我将 commitInterval 增加到 200,它会影响其他具有较小 commitIntervals 的批次的性能吗?

请指教。

4

1 回答 1

3
  1. 是的 - 你是对的,fetchSize 将带来 200 条记录,而 commit-interval 将在 50 条记录块中“提交”。

  2. 较大的提交间隔可以粗略地转化为要提交的较大的事务“游标”。也就是说,您将在减少事务开销方面获得一些性能(如果设置为 200,则大约为 1/4)。

这样做的“风险”是如果在提交间隔中发生异常,您会失去更多的“工作”。(而不是在失败时最多丢失 49 条记录,您可能会丢失多达 199 条并且必须再次执行)

根据您的架构暴露于故障(例如,您的数据源连接的安全性和稳定性)将决定一次提交 200 条记录与 50 条记录的风险程度。我赞成将您的 fetchSize 与您的提交间隔相匹配,因为没有重试管理器,当提交失败时您会丢失 fetchSize。

于 2013-07-05T15:05:03.583 回答