要求:
select查询可能会产生20万条记录。我们需要获取记录,对其进行处理,并将其与处理后的结果一起写入数据库。
使用的数据库:nuodb
问题:
我阅读了nuodb文档:
对事务引擎的查询结果将以小于100KB的行缓冲回客户端。一旦客户机遍历一组获取的结果,它将返回te以获得更多的结果。
我不确定数据库引擎是否能一次返回20万条记录。我还觉得在一个列表变量中保存20万条记录并不理想。select查询在where子句中有日期字段,如:
SELECT * FROM Table WHERE DATE >= '2020-06-04 00:00:00' AND DATE < '2020-06-04 23:00:00'
上述查询可能会产生20万条记录。
我想把问题分成:
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'
但我不确定这种方法是否理想。请给我建议。
因此,请考虑3个类a、b、c,它们分别扩展了itemreader、itemprocessor和itemwriter。
.get("stepToReadDataFromTable")
.<Entity1, Entity2>chunk(2000)
.reader(A())
.processor(B())
.writer(C())
.build();
我们可以这样做吗:类a将从200k条记录中提取2000条记录并对其进行处理,然后在处理完2000条记录(如区块中所述)后将其写入数据库。此循环将一直进行,直到处理完所有20万条记录。
如果是,我们如何才能做到这一点。有没有办法从select查询中分块提取数据?
1条答案
按热度按时间vx6bjr1n1#
您可以使用分页项读取器来读取页中的项,而不是将整个数据集加载到内存中。
这将在参考文档的面向块的处理部分进行解释。
这似乎与select查询能否在spring批处理中检索200k条记录有关。