【发布时间】:2019-11-19 16:36:11
【问题描述】:
我有类似的东西:
List<Data> dataList = stepts.stream()
.flatMap(step -> step.getPartialDataList().stream())
.collect(Collectors.toList());
所以我将每个步骤中的多个列表组合成 dataList。
我的问题是 dataList 可能会遇到 OutOfMemoryError。 关于如何批处理 dataList 并将批处理保存到数据库中的任何建议?
我最初的想法是:
for (Step step : steps) {
List<Data> partialDataList = step.getPartialDataList();
if (dataList.size() + partialDataList.size() <= MAXIMUM_SIZE) {
dataList.addAll(partialDataList);
} else {
saveIntoDb(dataList);
dataList = new ArrayList<>();
}
}
PS:我知道有this 的帖子,但不同的是我可能无法将整个数据存储在内存中。
LE:getPartialDataList 方法更像 createPartialDataList()
【问题讨论】:
-
在将批次保存到数据库之前,您是否对数据执行了任何其他操作?
-
可能?你尝试过吗?
-
与这个问题进一步相关的是,我们在这里为
List<Data>讨论的数据大小是多少?getPartialDataList是如何实现的?它是否将光标停留在数据读取上? -
@vphilipnyc 不,只是保存它
-
@Eugene,可能,是的。我正在尝试从产品环境中找出所有极端情况。
标签: java mysql hibernate java-8 java-stream