举个例子,我正在用条件(数百万行)从数据库中读取数据,对数据做一些业务,然后更新它。
我使用列范围分区器( 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
对于数百万的数据,这样的并行处理是没有用的,试图在单个请求中恢复所有数据以实现分布式分区需要花费很长时间。
什么是最好的解决方案?
发布于 2020-06-16 22:29:39
示例中显示的ColumnRangePartitioner表明,要使其有效(正如您已经注意到的),需要一个均匀分布的列。相反,您通常可以在查询和分区上添加一个行号,因为它将是结果上的序列。
SQL的一个示例如下所示(对于MySQL):
SELECT F.*,
@rownum := @rownum + 1 AS rank
FROM FOO F,
(SELECT @rownum := 0) r;这样,每次运行查询时,列rank都是自动生成的序列。根据该值,可以对数据集进行分区。因为这不是持久的,所以您需要做一些练习才能获得正确的‘d,但是Partitioner实现的基本逻辑如下所示:
ItemReader只在所提供的db ids范围内读取项目。https://stackoverflow.com/questions/62412939
复制相似问题