From 2f4ca3b5be4cbeea708c22b0553065d859b32743 Mon Sep 17 00:00:00 2001 From: YevhenBondarenko Date: Fri, 10 Jul 2020 17:07:15 +0300 Subject: [PATCH] improvements --- .../dao/sqlts/AbstractSqlTimeseriesDao.java | 22 +++++++++---------- .../thingsboard/server/dao/sqlts/TsKey.java | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java index 0e2dfabbef..75b3d6951b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java @@ -52,7 +52,8 @@ import org.thingsboard.server.dao.timeseries.SimpleListenableFuture; import javax.annotation.Nullable; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import java.util.Comparator; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -129,16 +130,15 @@ public abstract class AbstractSqlTimeseriesDao extends JpaAbstractDaoListeningEx tsLatestQueue = new TbSqlBlockingQueueWrapper<>(tsLatestParams, hashcodeFunction, tsLatestBatchThreads); tsLatestQueue.init(logExecutor, v -> { - Map> tsMap = - v.stream().collect(Collectors.groupingBy(ts -> new TsKey(ts.getEntityId(), ts.getStrKey()))); - - List latestEntities = - tsMap.keySet() - .stream() - .map(tsMap::get) - .map(list -> list.stream().max(Comparator.comparing(TsKvLatestEntity::getTs)).get()) - .collect(Collectors.toList()); - + Map trueLatest = new HashMap<>(); + v.forEach(ts -> { + TsKey key = new TsKey(ts.getEntityId(), ts.getKey()); + TsKvLatestEntity old = trueLatest.get(key); + if (old == null || old.getTs() < ts.getTs()) { + trueLatest.put(key, ts); + } + }); + List latestEntities = new ArrayList<>(trueLatest.values()); insertLatestTsRepository.saveOrUpdate(latestEntities); }); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sqlts/TsKey.java b/dao/src/main/java/org/thingsboard/server/dao/sqlts/TsKey.java index d14615ca48..17da2f80bc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sqlts/TsKey.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sqlts/TsKey.java @@ -22,5 +22,5 @@ import java.util.UUID; @Data public class TsKey { private final UUID entityId; - private final String key; + private final int key; }