This is an automated email from the ASF dual-hosted git repository. leirui pushed a commit to branch research/LTS-visualization in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 025fc89ab6b69e71b602bb6193a6bd921dd64090 Author: Lei Rui <[email protected]> AuthorDate: Sun Jan 28 15:45:24 2024 +0800 add todos --- .../groupby/LocalGroupByExecutorTri_ILTS.java | 7 +- ...ava => LocalGroupByExecutorTri_ILTS_noacc.java} | 4 +- .../iotdb/db/integration/tri/MyTest_ILTS.java | 88 +++++++++++++++++++--- 3 files changed, 86 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java index 893762f5f17..e7c6a8f6f14 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java @@ -75,7 +75,7 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { private final int N1; // 分桶数 - private static final int numIterations = CONFIG.getNumIterations(); + private final int numIterations = CONFIG.getNumIterations(); // do not make it static private Filter timeFilter; @@ -128,7 +128,7 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { long chunkMaxTime = chunkMetadata.getEndTime(); int idx1 = (int) Math.floor((chunkMinTime - startTime) * 1.0 / interval); int idx2 = (int) Math.floor((chunkMaxTime - startTime) * 1.0 / interval); - idx2 = (int) Math.min(idx2, N1 - 1); + idx2 = Math.min(idx2, N1 - 1); for (int i = idx1; i <= idx2; i++) { splitChunkList.computeIfAbsent(i, k -> new ArrayList<>()); splitChunkList.get(i).add(chunkSuit4Tri); @@ -190,6 +190,7 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { if (dataType != TSDataType.DOUBLE) { throw new UnSupportedDataTypeException(String.valueOf(dataType)); } + // TODO: 用元数据sum&count加速 // 1. load page data if it hasn't been loaded if (chunkSuit4Tri.pageReader == null) { chunkSuit4Tri.pageReader = @@ -238,6 +239,7 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { if (dataType != TSDataType.DOUBLE) { throw new UnSupportedDataTypeException(String.valueOf(dataType)); } + // TODO: 用FP&LP&BP&TP形成的rectangle加速 // load page data if it hasn't been loaded if (chunkSuit4Tri.pageReader == null) { chunkSuit4Tri.pageReader = @@ -250,6 +252,7 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { // ASSIGN DIRECTLY), WHICH WILL INTRODUCE BUGS! } PageReader pageReader = chunkSuit4Tri.pageReader; + // TODO: 用凸包bitmap加速 for (int j = 0; j < chunkSuit4Tri.chunkMetadata.getStatistics().getCount(); j++) { long timestamp = pageReader.timeBuffer.getLong(j * 8); if (timestamp < localCurStartTime) { diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS_noacc.java similarity index 99% copy from server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java copy to server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS_noacc.java index 893762f5f17..2ad917909d0 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS_noacc.java @@ -54,7 +54,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { +public class LocalGroupByExecutorTri_ILTS_noacc implements GroupByExecutor { private static final IoTDBConfig CONFIG = IoTDBDescriptor.getInstance().getConfig(); private static final Logger M4_CHUNK_METADATA = LoggerFactory.getLogger("M4_CHUNK_METADATA"); @@ -79,7 +79,7 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { private Filter timeFilter; - public LocalGroupByExecutorTri_ILTS( + public LocalGroupByExecutorTri_ILTS_noacc( PartialPath path, Set<String> allSensors, TSDataType dataType, diff --git a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java index fe93192c09e..c46c691dac2 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java @@ -73,7 +73,7 @@ public class MyTest_ILTS { config.setCompactionStrategy(CompactionStrategy.NO_COMPACTION); config.setEnableTri("ILTS"); - config.setNumIterations(4); + // config.setNumIterations(4); config.setEnableCPV(false); TSFileDescriptor.getInstance().getConfig().setEnableMinMaxLSM(false); @@ -89,9 +89,9 @@ public class MyTest_ILTS { } @Test - public void test3_2() { - prepareData3_2(); - + public void test1() { + prepareData1(); + config.setNumIterations(4); String res = "5.0[1],10.0[2],2.0[40],5.0[55],20.0[62],1.0[90],7.0[102],"; try (Connection connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root"); @@ -122,7 +122,41 @@ public class MyTest_ILTS { } } - private static void prepareData3_2() { + @Test + public void test1_2() { + prepareData1(); + config.setNumIterations(1); // result equals LTTB + String res = "5.0[1],10.0[2],2.0[40],15.0[60],18.0[70],1.0[90],7.0[102],"; + try (Connection connection = + DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + boolean hasResultSet = + statement.execute( + "SELECT min_value(s0)" + // TODO not real min_value here, actually controlled by enableTri + + " FROM root.vehicle.d0 group by ([2,102),20ms)"); + // (102-2)/(7-2)=20ms + // note keep no empty buckets + + Assert.assertTrue(hasResultSet); + try (ResultSet resultSet = statement.getResultSet()) { + int i = 0; + while (resultSet.next()) { + String ans = resultSet.getString(2); + // for LTTB all results are in the value string of MinValueAggrResult + // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义 + ans = ans.substring(0, ans.length() - 3); + System.out.println(ans); + Assert.assertEquals(res, ans); + } + } + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + private static void prepareData1() { // data: // https://user-images.githubusercontent.com/33376433/152003603-6b4e7494-00ff-47e4-bf6e-cab3c8600ce2.png // slightly modified @@ -155,9 +189,9 @@ public class MyTest_ILTS { } @Test - public void test3() { - prepareData3(); - + public void test2() { + prepareData2(); + config.setNumIterations(4); String res = "-1.2079272[0],1.101946[200],-0.523204[300],0.145359[500],-1.014322[700]," + "0.532565[900],-0.122525[1200],-0.676077[1300],0.809559[1500],0.315869[1800]," @@ -190,7 +224,43 @@ public class MyTest_ILTS { } } - private static void prepareData3() { + @Test + public void test2_2() { + prepareData2(); + config.setNumIterations(1); // result equals LTTB + String res = + "-1.2079272[0],1.101946[200],-0.523204[300],0.145359[500],-1.014322[700],0.532565[900]," + + "-0.146934[1100],-0.676077[1300],0.809559[1500],0.032211[1700]," + + "-0.413534[1900],-0.0211206[2100],"; + try (Connection connection = + DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + boolean hasResultSet = + statement.execute( + "SELECT min_value(s0)" + // TODO not real min_value here, actually controlled by enableTri + + " FROM root.vehicle.d0 group by ([100,2100),200ms)"); + // (tn-t2)/(nout-2)=(2100-100)/(12-2)=2000/10=200 + + Assert.assertTrue(hasResultSet); + try (ResultSet resultSet = statement.getResultSet()) { + int i = 0; + while (resultSet.next()) { + String ans = resultSet.getString(2); + // for LTTB all results are in the value string of MinValueAggrResult + // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义 + ans = ans.substring(0, ans.length() - 3); + System.out.println(ans); + Assert.assertEquals(res, ans); + } + } + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + private static void prepareData2() { try (Connection connection = DriverManager.getConnection( Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
