【发布时间】:2014-09-20 20:41:02
【问题描述】:
我正在为如何设计 Spring Batch 作业而苦恼。总体目标是检索约 2000 万条记录并将它们保存到 sql 数据库中。
我分两部分来做。首先,我检索我想要检索的记录的 2000 万个 ID,并将它们保存到文件(或 DB)中。这是一个相对较快的操作。其次,我遍历我的 Ids 文件,批量获取 2,000 个,并从外部服务检索它们的相关记录。然后我重复这个,一次 2,000 个 ID,直到我检索到所有记录。对于我检索的每批 2,000 条记录,我将它们保存到数据库中。
有些人可能会问我为什么要分两步这样做。我最终计划使第二步并行运行,以便我可以并行检索 2,000 条记录的批次,并希望大大加快下载速度。拥有 ID 可以让我将作业分成多个批次。现在,让我们不要担心并行性,而只关注如何设计更简单的顺序作业。
想象一下,我已经解决了在本地保存所有 Id 的第一个问题。它们在一个文件中,每行一个 Id。如何设计第二部分的步骤?
这就是我的想法……
使用平面文件阅读器读取 2,000 个 ID。我需要一个聚合器,因为我只想为每批 2K Id 对我的外部服务进行一次查询。这就是我挣扎的地方。我是否嵌套了一系列阅读器?或者我可以在处理器或写入器中“读取”吗?
本质上,我的问题是我想从文件中读取行,聚合这些行,然后立即进行另一次“读取”以检索相应的记录。我几乎想把读者链接在一起。
最后,一旦我从外部服务中检索了记录,我就会有一个记录列表。这意味着当他们到达作家那里时,我会有一份清单。我想要一个对象列表,以便我可以使用开箱即用的 JdbcItemWriter。
想法?希望这是有道理的。
安德鲁
【问题讨论】:
-
我刚刚在文档中找到了这个示例,似乎建议我应该在处理器中检索完整的对象(使用来自阅读器的 id)。也许我对这些接口名称的理解有点过于字面了。在处理器中“读取”感觉很奇怪。 docs.spring.io/spring-batch/trunk/reference/html/…
标签: java spring replication batch-processing spring-batch