This is an automated email from the ASF dual-hosted git repository. rong pushed a commit to branch xianyi in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d8a91709305490925ed80562ee79a90f9910e8e9 Author: Steve Yurong Su <[email protected]> AuthorDate: Wed Nov 24 15:52:05 2021 +0800 optimize performance --- .../main/java/org/apache/iotdb/SessionExample.java | 67 +++++++--------------- .../org/apache/iotdb/db/service/TSServiceImpl.java | 59 +++++++++++++++++-- 2 files changed, 75 insertions(+), 51 deletions(-) diff --git a/example/session/src/main/java/org/apache/iotdb/SessionExample.java b/example/session/src/main/java/org/apache/iotdb/SessionExample.java index cab736d..ba80fac 100644 --- a/example/session/src/main/java/org/apache/iotdb/SessionExample.java +++ b/example/session/src/main/java/org/apache/iotdb/SessionExample.java @@ -21,7 +21,6 @@ package org.apache.iotdb; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; -import org.apache.iotdb.rpc.TSStatusCode; import org.apache.iotdb.session.Session; import org.apache.iotdb.session.SessionDataSet; import org.apache.iotdb.session.SessionDataSet.DataIterator; @@ -62,18 +61,18 @@ public class SessionExample { // set session fetchSize session.setFetchSize(10000); - try { - session.setStorageGroup("root.sg1"); - } catch (StatementExecutionException e) { - if (e.getStatusCode() != TSStatusCode.PATH_ALREADY_EXIST_ERROR.getStatusCode()) { - throw e; - } - } + // try { + // session.setStorageGroup("root.sg1"); + // } catch (StatementExecutionException e) { + // if (e.getStatusCode() != TSStatusCode.PATH_ALREADY_EXIST_ERROR.getStatusCode()) { + // throw e; + // } + // } // createTemplate(); - createTimeseries(); - createMultiTimeseries(); - insertRecord(); + // createTimeseries(); + // createMultiTimeseries(); + // insertRecord(); insertTablet(); // insertTabletWithNullValues(); // insertTablets(); @@ -90,16 +89,16 @@ public class SessionExample { // deleteTimeseries(); // setTimeout(); - sessionEnableRedirect = new Session(LOCAL_HOST, 6667, "root", "root"); - sessionEnableRedirect.setEnableQueryRedirection(true); - sessionEnableRedirect.open(false); - - // set session fetchSize - sessionEnableRedirect.setFetchSize(10000); - - insertRecord4Redirect(); - query4Redirect(); - sessionEnableRedirect.close(); + // sessionEnableRedirect = new Session(LOCAL_HOST, 6667, "root", "root"); + // sessionEnableRedirect.setEnableQueryRedirection(true); + // sessionEnableRedirect.open(false); + // + // // set session fetchSize + // sessionEnableRedirect.setFetchSize(10000); + // + // insertRecord4Redirect(); + // query4Redirect(); + // sessionEnableRedirect.close(); session.close(); } @@ -393,7 +392,7 @@ public class SessionExample { // Method 1 to add tablet data long timestamp = System.currentTimeMillis(); - for (long row = 0; row < 100; row++) { + for (long row = 0; row < 1000; row++) { int rowIndex = tablet.rowSize++; tablet.addTimestamp(rowIndex, timestamp); for (int s = 0; s < 3; s++) { @@ -404,29 +403,7 @@ public class SessionExample { session.insertTablet(tablet, true); tablet.reset(); } - timestamp++; - } - - if (tablet.rowSize != 0) { - session.insertTablet(tablet); - tablet.reset(); - } - - // Method 2 to add tablet data - long[] timestamps = tablet.timestamps; - Object[] values = tablet.values; - - for (long time = 0; time < 100; time++) { - int row = tablet.rowSize++; - timestamps[row] = time; - for (int i = 0; i < 3; i++) { - long[] sensor = (long[]) values[i]; - sensor[row] = i; - } - if (tablet.rowSize == tablet.getMaxRowNumber()) { - session.insertTablet(tablet, true); - tablet.reset(); - } + timestamp += 3600 * 1000; } if (tablet.rowSize != 0) { diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java index 9ca4fd0..93fe754 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java @@ -950,12 +950,7 @@ public class TSServiceImpl extends BasicServiceProvider implements TSIService.If final SelectIntoPlan selectIntoPlan = (SelectIntoPlan) physicalPlan; final QueryPlan queryPlan = selectIntoPlan.getQueryPlan(); - if (queryPlan instanceof UDTFPlan - && queryPlan - .getResultColumns() - .get(0) - .getExpression() - .isTimeSeriesGeneratingFunctionExpression() + if (shouldSplit(queryPlan) // && ((FunctionExpression) queryPlan.getResultColumns().get(0).getExpression()) // .getFunctionName() // .equalsIgnoreCase("en") @@ -991,6 +986,58 @@ public class TSServiceImpl extends BasicServiceProvider implements TSIService.If } } + boolean shouldSplit(QueryPlan queryPlan) { + if (!(queryPlan instanceof UDTFPlan)) { + return false; + } + + if (!queryPlan + .getResultColumns() + .get(0) + .getExpression() + .isTimeSeriesGeneratingFunctionExpression()) { + return false; + } + + UDTFPlan udtfPlan = (UDTFPlan) queryPlan; + IExpression iExpression = udtfPlan.getExpression(); + if (iExpression instanceof GlobalTimeExpression) { + GlobalTimeExpression globalTimeExpression = (GlobalTimeExpression) iExpression; + if (globalTimeExpression.getFilter() instanceof AndFilter) { + AndFilter andFilter = (AndFilter) globalTimeExpression.getFilter(); + + if ((andFilter.getLeft() instanceof Lt || andFilter.getLeft() instanceof LtEq) + && (andFilter.getRight() instanceof Gt || andFilter.getRight() instanceof GtEq)) { + Filter filter = andFilter.getLeft(); + andFilter.setLeft(andFilter.getRight()); + andFilter.setRight(filter); + } + + final long dayTimeDelta = 24 * 60 * 60 * 1000; + + long left = 0, right = 0; + if (andFilter.getLeft() instanceof Gt) { + left = (long) ((Gt) andFilter.getLeft()).getValue(); + } + if (andFilter.getLeft() instanceof GtEq) { + left = (long) ((GtEq) andFilter.getLeft()).getValue(); + } + if (andFilter.getRight() instanceof Lt) { + right = (long) ((Lt) andFilter.getRight()).getValue(); + } + if (andFilter.getRight() instanceof LtEq) { + right = (long) ((LtEq) andFilter.getRight()).getValue(); + } + + if (right - left > dayTimeDelta) { + return true; + } + } + } + + return false; + } + private TSExecuteStatementResp executeSelectIntoStatementXianyi( UDTFPlan udtfPlan, TSServiceImpl tsService,
