首页 > 解决方案 > 在 Java 中有效地复制大型时间序列结果

问题描述

我正在使用 Java 从时间序列数据库(在我的例子中是 Influx)中查询数据。我在数据库中有大约 20.000-100.000 个值(字符串)。将我通过 Influx Java API 获得的结果映射到我的域对象似乎非常低效(在小型机器上约为 0.5 秒)。我想这是由于域对象的“资源密集型”对象创建。

我目前正在使用 StreamsAPI:

QueryResult series = result.getResults().get(0).getSeries().get(0);

List<ItemHistoryEntity> mappedList = series.getValues().stream().parallel().map(valueList ->
                new ItemHistoryEntity(valueList)).collect(Collectors.toList());

不幸的是,在我的情况下,我不能在数据库中对数据进行下采样。如何在 Java 中更有效地做到这一点?

编辑:接下来我将对列表进行下采样。问题是,为了进一步下采样,我需要列表中最旧的时间戳。为了得到这个时间戳,我需要迭代整个列表。Collectors.toList()即使我需要至少迭代两次,在我减小列表大小之前永远不要调用它会更有效吗?或者我应该使用额外的数据库查询找到最旧的时间戳,然后只迭代列表一次并仅为减少列表调用收集器?

标签: javaalgorithmtime-seriesjava-streaminfluxdb

解决方案


推荐阅读