我的流程如下:
我的问题是如何设置何时应该插入数据?在当前的设置中,数据只在循环结束时插入。这对我来说是个问题,因为我希望在测试中处理更多的数据。因此,如果我同意这一点,那么我的过程将以异常(OutOfMemory)结束。我应该在哪里定义批处理的最大数据量来调用instert?
发布于 2017-12-28 16:42:03
这里最重要的是不要一蹴而就地将想要处理的所有行都提取到内存中。当使用jOOQ时,这是使用ResultQuery.fetchLazy() (可能与ResultQuery.fetchSize(int)一起)完成的。然后,您可以使用Cursor.fetchNext(50)获取下50行,然后按如下方式进行插入:
try (Cursor<?> cursor = ctx
.select(...)
.from(...)
.fetchSize(50)
.fetchLazy()) {
Result<?> batch;
for (;;) {
batch = cursor.fetchNext(50);
if (batch.isEmpty())
break;
// Do your stuff here
// Do your insertion here
ctx.batchInsert(...);
}
}https://stackoverflow.com/questions/47941484
复制相似问题