【问题标题】:Persisting data larger then context limit across steps in spring batch在 Spring Batch 中跨步骤持久化大于上下文限制的数据
【发布时间】:2015-03-06 19:53:07
【问题描述】:

我们正在使用 Spring Batch 来处理 500K 行的大型 CSV 文件。这个处理的结果是两件事,一行表示一个文章对象,我们没有任何问题,在块完成后,我们使用处理过的文章列表(每块 1000 个)进行 API 调用。 API 端点可以过滤掉重复项,因此我们可以一次处理一行。

每行也有数量,第二个结果应该是每个位置相同物品标识符的数量之和

article_code, article_name, size, color, quantity, location, sublocation
123, Nike Shoes, 32, black, 3, store1, sales floor 1
124, Nike shoes, 34, white, 2, store1, sales floor 1
123, Nike Shoes, 32, black, 5, store1, sales floor 2
123, Nike shoes, 32, black, 5, store1, stock room
124, Nike shoes, 34, white, 7, store2, sales floor
123, Nike shoes, 32, black, 3, store2, sales floor
111, Nike shoes, 37, pink, 5, store2, sales floor

这应该会导致为每个位置创建 3 篇文章和 2 次 API 调用以保存库存(文章 123 在位置 store1 上的数量为 13,在 store2 中的数量为 3)。

目前,我们有一个步骤可以将文章保存在其余 API 之上,并作为副作用将数量保存在 DB 中,另一个步骤是从按位置分组的 DB 中提取该数据并执行 API 调用以保存库存。

  1. 如果数据步骤是跨步骤存储数据的好方法是什么? 大于StepContext的限制?
  2. spring batch 是否有任何优雅的方式来汇总 CSV 文件中未按某些标准排序的行?

【问题讨论】:

    标签: spring csv spring-batch


    【解决方案1】:
    1. 对于我们遇到的类似问题,我们决定在 Spring Batch 元表所在的同一数据库中添加新表,每次成功运行 Job 后我们都会清除它。流程是: 浏览 CSV 文件,从作家保存的“文章”中过滤所需的数据。在这样做的同时,我们在表格中汇总了数据。当此步骤完成后,您从新表中读取数据并在新步骤中保存“股票”。

    2. 我不这么认为。这也可能是非常繁重和昂贵的操作,所以这就是 Spring 人们不费心实施它的原因。 我想您可以创建自己的 ItemReader 并覆盖 afterPropertiesSet 上的行为以按标准进行排序,但是在具有 500k 行的文件上,您需要进行所有缓冲、内存管理以及这样您至少读取文件 2 次开销很大。

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2016-08-19
      • 2019-10-23
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多