This is an automated email from the ASF dual-hosted git repository.
strongduanmu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new b2436d86756 Optimize route engine temporary collections (#38788)
b2436d86756 is described below
commit b2436d8675675ebc5a0c2cfd2e8aa73384479e9b
Author: ZhangCheng <[email protected]>
AuthorDate: Wed Jun 3 18:03:02 2026 +0800
Optimize route engine temporary collections (#38788)
---
.../engine/type/complex/ShardingCartesianRouteEngine.java | 15 ++++++++++-----
.../engine/type/standard/ShardingStandardRouteEngine.java | 8 +++-----
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/complex/ShardingCartesianRouteEngine.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/complex/ShardingCartesianRouteEngine.java
index ffeb8065d8c..f36f70d3fe7 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/complex/ShardingCartesianRouteEngine.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/complex/ShardingCartesianRouteEngine.java
@@ -37,7 +37,6 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
-import java.util.stream.Collectors;
/**
* Sharding cartesian route engine.
@@ -76,10 +75,11 @@ public final class ShardingCartesianRouteEngine implements
ShardingRouteEngine {
private Collection<String> getIntersectionDataSources() {
Collection<String> result = new HashSet<>();
for (RouteContext each : routeContexts) {
+ Collection<String> actualDataSourceNames =
each.getActualDataSourceNames();
if (result.isEmpty()) {
- result.addAll(each.getActualDataSourceNames());
+ result.addAll(actualDataSourceNames);
}
- result.retainAll(each.getActualDataSourceNames());
+ result.retainAll(actualDataSourceNames);
}
return result;
}
@@ -95,7 +95,11 @@ public final class ShardingCartesianRouteEngine implements
ShardingRouteEngine {
private List<Set<RouteMapper>> toRoutingTableGroups(final String
dataSource, final List<Set<String>> actualTableGroups) {
List<Set<RouteMapper>> result = new
ArrayList<>(actualTableGroups.size());
for (Set<String> each : actualTableGroups) {
- result.add(new LinkedHashSet<>(new
ArrayList<>(each).stream().map(input -> findRoutingTable(dataSource,
input)).collect(Collectors.toList())));
+ Set<RouteMapper> routingTableGroup = new
LinkedHashSet<>(each.size(), 1F);
+ for (String actualTable : each) {
+ routingTableGroup.add(findRoutingTable(dataSource,
actualTable));
+ }
+ result.add(routingTableGroup);
}
return result;
}
@@ -112,8 +116,9 @@ public final class ShardingCartesianRouteEngine implements
ShardingRouteEngine {
private Collection<RouteUnit> getRouteUnits(final String dataSource, final
Set<List<RouteMapper>> cartesianRoutingTableGroups) {
Collection<RouteUnit> result = new
LinkedHashSet<>(cartesianRoutingTableGroups.size(), 1F);
+ RouteMapper dataSourceMapper = new RouteMapper(dataSource, dataSource);
for (List<RouteMapper> each : cartesianRoutingTableGroups) {
- result.add(new RouteUnit(new RouteMapper(dataSource, dataSource),
new LinkedList<>(each)));
+ result.add(new RouteUnit(dataSourceMapper, new
LinkedList<>(each)));
}
return result;
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRouteEngine.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRouteEngine.java
index 3b7d0c2e059..3ecfcaa3929 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRouteEngine.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRouteEngine.java
@@ -242,7 +242,7 @@ public final class ShardingStandardRouteEngine implements
ShardingRouteEngine {
Collection<String> routedDataSources = routeDataSources(shardingTable,
databaseShardingStrategy, databaseShardingValues);
Collection<DataNode> result = new LinkedList<>();
for (String each : routedDataSources) {
- result.addAll(routeTables(shardingTable, each,
tableShardingStrategy, tableShardingValues));
+ routeTables(shardingTable, each, tableShardingStrategy,
tableShardingValues, result);
}
return result;
}
@@ -258,17 +258,15 @@ public final class ShardingStandardRouteEngine implements
ShardingRouteEngine {
return result;
}
- private Collection<DataNode> routeTables(final ShardingTable
shardingTable, final String routedDataSource,
- final ShardingStrategy
tableShardingStrategy, final List<ShardingConditionValue> tableShardingValues) {
+ private void routeTables(final ShardingTable shardingTable, final String
routedDataSource,
+ final ShardingStrategy tableShardingStrategy,
final List<ShardingConditionValue> tableShardingValues, final
Collection<DataNode> result) {
Collection<String> availableTargetTables =
shardingTable.getActualTableNames(routedDataSource);
Collection<String> routedTables = tableShardingValues.isEmpty()
? availableTargetTables
: tableShardingStrategy.doSharding(availableTargetTables,
tableShardingValues, shardingTable.getTableDataNode(), props);
- Collection<DataNode> result = new LinkedList<>();
for (String each : routedTables) {
result.add(new DataNode(routedDataSource, (String) null, each));
}
- return result;
}
private ShardingStrategy createShardingStrategy(final
ShardingStrategyConfiguration shardingStrategyConfig, final Map<String,
ShardingAlgorithm> shardingAlgorithms,