在 Spring Batch 中加载和处理大量数据

问题描述 投票:0回答:1

我们有一个使用以下连接资源代码将 100M 记录从共享对象存储桶加载到 Mongo DB 的用例

HttpURLConnection httpConnection = null;
try {
    httpConnection = (HttpURLConnection) this.url.openConnection();
    ResourceUtils.useCachesIfNecessary(httpConnection);
    if(StringUtils.hasText(byteRangeHeader)) {
        httpConnection.setRequestProperty("Range", String.format("bytes=%s", byteRangeHeader));
    }
    inputStream = httpConnection.getInputStream();

} catch (Exception e) {
    e.printStacktrace
}
return inputStream;

我们使用基于“范围”标头的分区,并使用 15 个线程加载 100M 记录。这大约需要 30 分钟。问题是 http 连接会在 15 分钟内被网络设备关闭。我们如何处理这种情况?

  1. 将100M记录加载到内存中并处理(我可以做多进程和多线程)
  2. 连接必须在 15 分钟前刷新,但是如果我建立了新连接,Spring Batch Reader 是否能够继续上次完成的位置?
spring spring-batch
1个回答
0
投票

您没有提到您使用哪个读取器,但如果它继承自

AbstractItemCountingItemStreamItemReader
,那么即使它从远程资源读取,它也可以在重新启动场景中使用(它将恢复从元中保存的最后一个偏移量读取)数据存储库)。

如果您有足够的本地存储空间,另一个选择是下载文件或在第一步中将其暂存在数据库表/集合中,然后在下一步中对其进行处理。

© www.soinside.com 2019 - 2024. All rights reserved.