Эффективно копировать большие результаты временных рядов в Java - PullRequest
0 голосов
/ 28 марта 2020

Я запрашиваю данные из базы данных временных рядов (в моем случае Influx), используя Java. У меня есть приблизительно 20.000-100.000 значений (строк) в базе данных. Отображение результатов, которые я получаю через API Influx Java, на мои доменные объекты кажется очень неэффективным (около 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(), пока я не уменьшу размер списка, хотя мне нужно повторить его хотя бы дважды. Или я должен найти самую старую временную метку, используя дополнительный запрос БД, а затем повторить список только один раз и вызвать Collector только для сокращенного списка?

...