如何实现Spring批量远程处理并仍然保持写入顺序?

时间:2013-08-12 08:01:54

标签: java spring batch-processing spring-batch

我是Spring Batch的新手,刚刚开始进行POC以证明Spring Batch能够在一小时内处理1m记录。然而,该架构要求我们展示水平可伸缩性。

我已经阅读了Partitoning和Remote Chunking策略。两者都对我有意义。两者之间的本质区别在于,Remote Chunking需要一个持久的消息队列,因为实际写出数据库或文件是从主服务器发生的。在分配时,不需要持久消息队列,因为从从属服务器发生写入。

然而,我完全迷失了,如何确保这两个并行处理变体的结果以正确的顺序写出来? 。

让我们以参与为例。据我所知,如果处理1000条记录的特定步骤被分成10个并行步骤执行,每个执行都有自己的Reader,Processor和Writer,其中一个执行可以很容易地在另一个执行之前完成。结果是,一个步骤执行的ItemWriter可以在将处理200-300的结果写出到同一个表之前将处理记录300-400的结果写入表中,因为该特定步骤执行可能滞后。

这意味着现在我有一个输出表,它具有处理的所有结果,但它们的排序顺序不正确。可能需要进行另一轮顺序处理,只需将它们恢复到正确的排序顺序1到1000。

我很难理解,我如何确保正确的排序输出,同时通过Spring Batch中描述的远程处理策略水平扩展系统。

我已经阅读了这两本书。 http://www.manning.com/templier/以及http://www.apress.com/9781430234524但这些书中没有任何内容可以回答我的问题。

1 个答案:

答案 0 :(得分:0)

我认为你不能这样做因为Table自然没有被排除。如果您需要以某种方式订购它们,请添加由writer管理的订单列。第一个分区写入1-100,第二个分区101-200等。下一步读者将通过[订单栏]获取订单。由于先前分区器中缺少写入而导致的订单列之间的孔不是问题。我的2美分