我有一段代码,它从数据库中获取20万个条目,然后批量处理。我注意到的是processBatch(每批处理5000个条目)需要大约3分钟来处理(基本上需要2小时处理)
我已经在为entryId的数据库使用索引来加快查找条目的速度。我想知道的是,是否有可能有这种批处理以某种方式并行运行。
如果不清楚,我会很乐意重构这个问题
Stream<X> streams= repository
.streamBySourceFileCreationDate(getDateFromFilename(sourceFileName));
int batchSize = properties.getBuildOutput().getSize();
List<OutX> built = new ArrayList<>();
Iterators.partition(streams.iterator(), batchSize)
.forEachRemaining(list -> processBatch(list, built));
private void processBatch(List<X> list, List<OutX> built) {
list.stream().map(m -> {
X xEntry = repository
.findLatestUpdateById(m.getEntryId());
if (xEntry == null) {
return null;
}
XOut out = buildXOut(x);
return out;
}).filter(Objects::nonNull).forEach(built::add);
}
1条答案
按热度按时间j2cgzkjk1#
许多可能的选择之一: