谓词拆分和并行处理
Predicate splitting and parallel processing
我是 Spring Batch 的新手,我不知道如何针对我的问题提出正确的解决方案。
我有一个包含一百万或两条记录的 CSV 文件。这些记录按 id 分组。
id;head-x;head-y;...
1;;;
1;;;
1;;;
...
1;;;
2;;;
2;;;
2;;;
...
2;;;
3;;;
3;;;
...
3;;;
...
...
我想要的是将这些记录作为一个组来处理。我阅读了所有 1 组记录过程并将它们转换为业务模型并将其保存到我的数据库中。
我需要并行完成这项工作以加快处理速度。如果可能的话,我想在处理 1 的同时处理 2 和 3。
我开始使用 StepBuilderFactory#chunk()
但这给了我固定大小的块。我可以在一个块或一个不完整的块中获取多个组。
你有什么想法吗?
由于您的记录已经按 Id 按顺序分组,您可以使用 SingleItemPeekableItemReader 将多个物理记录按 Id 读取到一个逻辑项中。一旦到位,您可以同步 reader(使其成为线程安全的)并配置多线程步骤以并行处理项目。
你也可以看看AggregateItemReader (which is part of the samples) to aggregate multiple physical records into a single logical one: multi-line orders sample。在这里,多线程步骤也会提高您的工作性能。
我是 Spring Batch 的新手,我不知道如何针对我的问题提出正确的解决方案。
我有一个包含一百万或两条记录的 CSV 文件。这些记录按 id 分组。
id;head-x;head-y;...
1;;;
1;;;
1;;;
...
1;;;
2;;;
2;;;
2;;;
...
2;;;
3;;;
3;;;
...
3;;;
...
...
我想要的是将这些记录作为一个组来处理。我阅读了所有 1 组记录过程并将它们转换为业务模型并将其保存到我的数据库中。
我需要并行完成这项工作以加快处理速度。如果可能的话,我想在处理 1 的同时处理 2 和 3。
我开始使用 StepBuilderFactory#chunk()
但这给了我固定大小的块。我可以在一个块或一个不完整的块中获取多个组。
你有什么想法吗?
由于您的记录已经按 Id 按顺序分组,您可以使用 SingleItemPeekableItemReader 将多个物理记录按 Id 读取到一个逻辑项中。一旦到位,您可以同步 reader(使其成为线程安全的)并配置多线程步骤以并行处理项目。
你也可以看看AggregateItemReader (which is part of the samples) to aggregate multiple physical records into a single logical one: multi-line orders sample。在这里,多线程步骤也会提高您的工作性能。