From f9a18ea764b16c47ead034941e63c16d53c7fd08 Mon Sep 17 00:00:00 2001 From: Yongzao <532741407@qq.com> Date: Thu, 16 Apr 2026 10:04:36 +0800 Subject: [PATCH] f --- .../plan/analyze/ClusterPartitionFetcher.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java index ca7ae02f739c..f93b9964c205 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java @@ -60,7 +60,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -520,19 +519,30 @@ private SchemaPartition parseSchemaPartitionTableResp( String database = entry1.getKey(); final Map result1 = regionReplicaMap.computeIfAbsent(database, k -> new HashMap<>()); + Map seriesPartitionTable = entry1.getValue(); + + if (seriesPartitionTable.size() == 1) { + // Fast collection in case of query for single device + Map.Entry seriesPartitionEntry = + seriesPartitionTable.entrySet().iterator().next(); + List regionReplicaSets = + partitionCache.getRegionReplicaSet( + Collections.singletonList(seriesPartitionEntry.getValue())); + result1.put(seriesPartitionEntry.getKey(), regionReplicaSets.get(0)); + continue; + } - Map orderedMap = - new LinkedHashMap<>(entry1.getValue()); - List orderedGroupIds = - orderedMap.values().stream().distinct().collect(Collectors.toList()); + List distinctRegionGroupIds = + new ArrayList<>(new HashSet<>(seriesPartitionTable.values())); List regionReplicaSets = - partitionCache.getRegionReplicaSet(orderedGroupIds); + partitionCache.getRegionReplicaSet(distinctRegionGroupIds); Map groupIdToReplicaSet = new HashMap<>(); - for (int index = 0; index < orderedGroupIds.size(); index++) { - groupIdToReplicaSet.put(orderedGroupIds.get(index), regionReplicaSets.get(index)); + for (int index = 0; index < distinctRegionGroupIds.size(); index++) { + groupIdToReplicaSet.put(distinctRegionGroupIds.get(index), regionReplicaSets.get(index)); } - for (Map.Entry entry2 : orderedMap.entrySet()) { + for (Map.Entry entry2 : + seriesPartitionTable.entrySet()) { result1.put(entry2.getKey(), groupIdToReplicaSet.get(entry2.getValue())); } }