执行大量数据库读取的单批作业



我有一个Spring Batch解决方案,它读取Oracle数据库中的几个表,对数据进行一些扁平化和清理,并将其发送到我们的BI平台Restful Api。Spring Batch按日期而不是按大小将这些数据分解为块。可能在某一天,一个区块可能由数百万行组成。我们以以下方式运行完整的端到端流程:

  • Control-M在预定时间向负载均衡器发送触发器
  • 通过负载均衡器请求到达Spring Batch应用程序的一个实例
  • Spring Batch从Oracle数据库中分块读取当天的数据
  • 然后将区块发送到目标API

我的问题是:

  1. 块状物会变得更重。如果它包含数百万行,那么实例的堆大小就会增加,并且在某一点上块将以缓慢的速度处理
  2. 一个实例承担整个批处理的负载

如何在一组实例中分配此处理?并行处理可以实现吗?如果可以,我如何确保多个实例不会读取相同的行(以避免重复(?还有其他建议吗?

谢谢。

您可以使用(本地或远程(分区步骤,其中每个工作步骤都被分配了一个不同的数据集。您可以在这里的文档中找到更多详细信息和代码示例:

  • https://docs.spring.io/spring-batch/docs/current/reference/html/spring-batch-integration.html#remote-分区
  • https://github.com/spring-projects/spring-batch/tree/main/spring-batch-samples#partitioning-样品

最新更新