在 Spring 批量加载和处理大量数据

kmbjn2e3  于 2023-10-15  发布在  Spring
关注(0)|答案(1)|浏览(134)

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

  1. HttpURLConnection httpConnection = null;
  2. try {
  3. httpConnection = (HttpURLConnection) this.url.openConnection();
  4. ResourceUtils.useCachesIfNecessary(httpConnection);
  5. if(StringUtils.hasText(byteRangeHeader)) {
  6. httpConnection.setRequestProperty("Range", String.format("bytes=%s", byteRangeHeader));
  7. }
  8. inputStream = httpConnection.getInputStream();
  9. } catch (Exception e) {
  10. e.printStacktrace
  11. }
  12. return inputStream;

我们使用基于“范围”头的分区,并使用15个线程加载100M记录。这大约需要30分钟。问题是HTTP连接在15分钟内被网络设备关闭。我们该怎么处理这种情况?
1.加载100M记录到内存中并处理它(我可以做多进程和多线程)
1.连接必须在15分钟前刷新,但如果我建立了新的连接,Spring批处理读取器能否在上次完成的地方继续?

mpbci0fu

mpbci0fu1#

您没有提到您使用的读取器,但是如果它继承自AbstractItemCountingItemStreamItemReader,那么即使它从远程资源读取,也可以在重启场景中使用它(它将从保存在元数据存储库中的最后一个偏移量恢复阅读)。
如果您有足够的本地存储,另一种选择是下载文件或在第一步中将其暂存在数据库表/集合中,然后在下一步中处理它。

相关问题