You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/04/13 07:06:20 UTC
[iotdb] 01/01: fake optimization for createStmt to decrease new partialpath
This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch optimize_create_stmt
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c0eaba9b9fa73a57241c1a037e0b07dec0ac48e5
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Tue Apr 11 21:06:06 2023 +0800
fake optimization for createStmt to decrease new partialpath
---
.../apache/iotdb/db/mpp/plan/parser/StatementGenerator.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
index ccd650336d..04fe5ff024 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
@@ -105,12 +105,16 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
/** Convert SQL and RPC requests to {@link Statement}. */
public class StatementGenerator {
private static final PerformanceOverviewMetrics PERFORMANCE_OVERVIEW_METRICS =
PerformanceOverviewMetrics.getInstance();
+ private static final ConcurrentHashMap<String, PartialPath> partialPathCache =
+ new ConcurrentHashMap<>();
+
public static Statement createStatement(String sql, ZoneId zoneId) {
return invokeParser(sql, zoneId);
}
@@ -348,7 +352,11 @@ public class StatementGenerator {
List<InsertRowStatement> insertRowStatementList = new ArrayList<>();
for (int i = 0; i < req.prefixPaths.size(); i++) {
InsertRowStatement statement = new InsertRowStatement();
- statement.setDevicePath(new PartialPath(req.getPrefixPaths().get(i)));
+ String prefix = req.getPrefixPaths().get(i);
+ if (!partialPathCache.containsKey(prefix)) {
+ partialPathCache.put(prefix, new PartialPath(prefix));
+ }
+ statement.setDevicePath(partialPathCache.get(prefix));
statement.setMeasurements(req.getMeasurementsList().get(i).toArray(new String[0]));
statement.setTime(req.getTimestamps().get(i));
statement.fillValues(req.valuesList.get(i));