1

要求:

SELECT 查询可能会导致 200K 记录。我们需要获取记录,对其进行处理并将其与处理结果一起写入数据库。

使用的数据库:NuoDB

问题:

我已阅读 NuoDB 文档:

对事务引擎的查询结果将以小于 100 KB 的行缓冲回客户端。一旦客户端对一组获取的结果进行迭代,它就会返回到 TE 以获取更多结果。

我不确定数据库的引擎是否可以一次返回 20 万条记录。而且我也觉得在 List 变量中保存 200K 记录并不理想。SELECT 查询在 where 子句中有日期字段,例如:

SELECT * FROM Table WHERE DATE >= '2020-06-04 00:00:00' AND DATE < '2020-06-04 23:00:00'

上述查询可能会产生 200K 条记录。

我想将查询划分为:

SELECT * FROM Table WHERE DATE >= '2020-06-04 00:00:00' AND DATE < '2020-06-04 10:00:00'
SELECT * FROM Table WHERE DATE >= '2020-06-04 10:00:01' AND DATE < '2020-06-04 18:00:00'
SELECT * FROM Table WHERE DATE >= '2020-06-04 18:00:01' AND DATE < '2020-06-04 23:00:00'

但我不确定这种方法是否理想。请指教。

所以请考虑分别扩展 ItemReader、ItemProcessor 和 ItemWriter 的 3 个类 A、B、C。

        .get("stepToReadDataFromTable")
        .<Entity1, Entity2>chunk(2000)        
        .reader(A()) 
        .processor(B())
        .writer(C())
        .build();

我们可以这样做吗:A 类将从 200K 记录中提取 2000 条记录并对其进行处理,并在处理完 2000 条记录(如块中所述)后将其写入数据库。这个循环将一直持续到处理完所有 200K 记录。

如果是,我们如何才能做到这一点。有没有办法从选择查询中分块提取数据?

4

1 回答 1

0

您可以使用分页项目阅读器来读取页面中的项目,而不是将整个数据集加载到内存中。

这在参考文档的面向块的处理部分中进行了解释。

这似乎与SELECT Query 能否在 Spring Batch 中检索 200K 记录有关

于 2020-06-05T13:59:45.647 回答