要求:
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 记录。
如果是,我们如何才能做到这一点。有没有办法从选择查询中分块提取数据?