首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非分布式数据弹簧批处理分配器

非分布式数据弹簧批处理分配器
EN

Stack Overflow用户
提问于 2020-06-16 16:11:58
回答 1查看 252关注 0票数 0

举个例子,我正在用条件(数百万行)从数据库中读取数据,对数据做一些业务,然后更新它。

我使用列范围分区器( Id列)来处理Min和Max Id,并使用max-min/gridSize创建分区。

现在假设我有gridSize =3的i 1、22、23、24、30,根据这个逻辑,我将有3个分区:

partition1处理Id 1

partition2处理0行

partition3处理22、23、24和30

对于数百万的数据,这样的并行处理是没有用的,试图在单个请求中恢复所有数据以实现分布式分区需要花费很长时间。

什么是最好的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-16 22:29:39

示例中显示的ColumnRangePartitioner表明,要使其有效(正如您已经注意到的),需要一个均匀分布的列。相反,您通常可以在查询和分区上添加一个行号,因为它将是结果上的序列。

SQL的一个示例如下所示(对于MySQL):

代码语言:javascript
复制
SELECT F.*, 
       @rownum := @rownum + 1 AS rank 
FROM FOO F, 
     (SELECT @rownum := 0) r;

这样,每次运行查询时,列rank都是自动生成的序列。根据该值,可以对数据集进行分区。因为这不是持久的,所以您需要做一些练习才能获得正确的‘d,但是Partitioner实现的基本逻辑如下所示:

  1. 运行计数查询以查找数据集中有多少记录。
  2. 使用上述技术运行查询,以确定每个分区范围的开始和结束的db id。这将使您可以使用实际的db ids为每个partition.
  3. Create筛选每个ids (开始/结束)一个分区。
  4. 设置您的ItemReader只在所提供的db ids范围内读取项目。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62412939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档