Spring批处理-暂存表设计-将数据传输到主表

Spring批处理-暂存表设计-将数据传输到主表,spring,spring-batch,Spring,Spring Batch,我正在开发一个数据加载器应用程序,它使用平面文件读取数据并插入临时暂存表。这是使用MultiResourcePartitioner(线程池10-11,队列151)完成的,其中每个步骤对每个文件并行运行。大约有15000个文件,因此一旦第一组150个文件资源完成,jobexecutiondecider将再次运行另外150个文件,同样,这样直到15000个文件完成 下一步是将数据从临时表移动到主表,然后,文件将被压缩并移动到另一个位置。在设计暂存和归档步骤时,我要求您的输入具有适度的吞吐量,如果作业

我正在开发一个数据加载器应用程序,它使用平面文件读取数据并插入临时暂存表。这是使用MultiResourcePartitioner(线程池10-11,队列151)完成的,其中每个步骤对每个文件并行运行。大约有15000个文件,因此一旦第一组150个文件资源完成,jobexecutiondecider将再次运行另外150个文件,同样,这样直到15000个文件完成

下一步是将数据从临时表移动到主表,然后,文件将被压缩并移动到另一个位置。在设计暂存和归档步骤时,我要求您的输入具有适度的吞吐量,如果作业在下一次运行期间失败,即大约3小时后,它应清除所有陈旧数据,并将已完成的数据移动到主表。当我说已完成时,这意味着已成功读取完整的文件并将其插入临时表。只有这些数据被移动到主表中。我们还有另一个表,它存储文件名、文件路径和完成状态,并在成功完成文件时更新,更新后步骤方法

注意:

我们不希望直接插入到主表中,因为该表已物化视图,因此删除主表中的过时数据将影响业务用户查看报表,一次他们看到记录,下次记录因作业每小时运行而消失,并清除不成功的数据

我目前的方法是与multiresourcepartitioner步骤并行运行staging步骤,并有一个固定延迟为2分钟的计划任务执行器,tasklet bean轮询staging表,移动已处理标记Y的数据并从staging表中删除,同时监视partitioner步骤,无论它是在运行还是已停止。如果正在运行,则tasklet将返回RepeatStatus.CONTINUE,如果分区器步骤已完成,则RepeatStatus.FINISHED已完成。最后一步将存档文件。当作业再次启动时
,如果某个存档文件未完成,这是从另一个存储文件名等的表中得知的,列为“已存档”,则为“未存档”。请让我知道您的评论。

我想,您的问题不是关于
spring batch
,特别是(我希望它做得很好),而是关于一般的SQL导入策略(我希望我已经涵盖了这一点)。也许你可以更具体地回答你的问题(描述你的问题/局限性/改进点)?我的问题是,第3段提到的方法是否更好?你还有其他方法吗?你可以尝试不同的方法,尝试对你更有效的方法。如果你在这里问,也许你会面临一些问题。告诉我们,它们是什么,然后社区可能会提出解决方案。