java - Spring-Batch:为未知数量的分区编写分区器

标签 java spring spring-batch bioinformatics partitioning

我正在学习 spring-batch。我目前正在处理如下所示的生物数据:

interface Variant {
  public String getChromosome();
  public int getPosition();
  public Set<String> getGenes();
}

(变体是基因组上可能与某些基因重叠的位置)。

我已经写了一些Itemreaders/Itemwriters

现在我想每个基因进行一些分析。因此,我想为每个基因(gene1、gene2、...geneN)拆分我的工作流程,以对与一个基因相关的所有变体进行一些统计。

enter image description here

实现 Partioner 的最佳方式是什么?为此(无论如何,这是正确的类(class)吗?)?我见过的所有示例都使用一些“索引”或有限数量的gridSize?此外,partiton(gridsize)返回的 map 是否必须少于 gridSize 项目,或者我可以返回一个“大” map ,并且 spring-batch 能够并行运行不超过 gridSize 作业吗?如何在最后加入数据?

谢谢

编辑:或者我应该看看 MultiResourceItemWriter ?

最佳答案

使用 Spring Batch 的分区功能时,涉及两个主要类,PartitionerPartitionHandler .

<强> Partitioner
Partitioner接口(interface)负责将要处理的数据划分为多个分区。它有一个方法 Partitioner#partition(int gridSize)负责分析要分区的数据并返回 Map每个分区一个条目。 gridSize参数实际上只是整个计算中的一个输入,可以使用或忽略。例如,如果 gridSize是 5,我可能选择返回恰好 5 个分区,我可能选择过度分区并返回 5 的某个倍数,或者我可能分析数据并意识到我只需要 3 个分区并完全忽略 gridSize值。

<强> PartionHandler
PartitionHandler负责 Partitioner 返回的分区的委托(delegate)给 worker 。 Spring生态系统内提供了三个PartitionHandler实现,a TaskExecutorPartitionHandler将工作委托(delegate)给当前 JVM 内部的线程,a MessageChannelPartitionHandler将工作委托(delegate)给远程工作人员,通过某种形式的消息传递中间件进行监听,以及 DeployerPartitionHandler从 Spring Cloud Task 项目中动态启动新的工作线程来执行提供的分区。

根据上述所有内容,回答您的具体问题:

  1. 为此实现 Partioner 的最佳方法是什么(它是正确的类吗?)?这通常取决于您的分区数据及其所在的存储。没有进一步了解如何实现你正在存储基因数据,我无法真正评论什么是最好的方法。
  2. partiton(gridsize) 返回的 map 是否必须包含小于 gridSize 的项目,或者我可以返回一个“大” map 并且 spring-batch 能够并行运行不超过 gridSize 的作业吗?您可以退回 Map 中任意数量的商品如您认为合适。如上所述,gridSize真正的目的是作为指南。
  3. 最后如何连接数据?分区步骤应使每个分区彼此独立处理。如果您希望在最后进行某种形式的联接,通常会在分区步骤之后的步骤中执行此操作。

关于java - Spring-Batch:为未知数量的分区编写分区器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46682009/

相关文章:

java - Spring Batch - 进程在哪里运行

java - 迭代非列表的最短方法?

java,判断圆是否在一个区域内

Spring 5 响应式(Reactive) WebSocket : recommended use

java - Spring - 如何使用两个数据源正确配置@Transactional?

spring - 无法使 Spring Batch 条件流工作

spring-batch - 禁用 Spring Batch 作业

java - 如何在文本字符串中验证卡 PAN?

java - 从输入 IST 日期和时间获取加拿大/东部偏移量

java - 无法使用 Spring Security 保护 AngularJS 页面