This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch ty/OptSeriesScan in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6f7a4b82962c136af70776255be41e8049fcf56e Author: JackieTien97 <[email protected]> AuthorDate: Sat Mar 23 09:23:52 2024 +0800 opt --- .../db/queryengine/execution/driver/DataDriver.java | 2 ++ .../execution/fragment/FragmentInstanceContext.java | 1 + .../execution/operator/source/SeriesScanUtil.java | 20 ++++++++++++-------- .../dataregion/read/QueryDataSource.java | 10 ++++++++++ 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DataDriver.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DataDriver.java index ea658fcaf2b..6c8c9d1143c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DataDriver.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DataDriver.java @@ -95,6 +95,8 @@ public class DataDriver extends Driver { QueryDataSource queryDataSource = new QueryDataSource(dataSource.getSeqResources(), dataSource.getUnseqResources()); + queryDataSource.setSingleDevice(queryDataSource.isSingleDevice()); + queryDataSource.setDataTTL(dataSource.getDataTTL()); sourceOperator.initQueryDataSource(queryDataSource); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java index b752c398818..e3025bd1497 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java @@ -372,6 +372,7 @@ public class FragmentInstanceContext extends QueryContext { closedFilePaths = new HashSet<>(); unClosedFilePaths = new HashSet<>(); addUsedFilesForQuery(sharedQueryDataSource); + sharedQueryDataSource.setSingleDevice(selectedDeviceIdSet.size() == 1); } } finally { setInitQueryDataSourceCost(System.nanoTime() - startTime); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java index 7f4a98c8ddc..d86b01dd6d0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java @@ -1368,8 +1368,9 @@ public class SeriesScanUtil { while (dataSource.hasNextSeqResource(curSeqFileIndex, getAscending())) { TsFileResource tsFileResource = dataSource.getSeqResourceByIndex(curSeqFileIndex); if (tsFileResource != null - && tsFileResource.isSatisfied( - seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), true, false)) { + && (dataSource.isSingleDevice() + || tsFileResource.isSatisfied( + seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), true, false))) { break; } curSeqFileIndex--; @@ -1382,8 +1383,9 @@ public class SeriesScanUtil { while (dataSource.hasNextUnseqResource(curUnseqFileIndex)) { TsFileResource tsFileResource = dataSource.getUnseqResourceByIndex(curUnseqFileIndex); if (tsFileResource != null - && tsFileResource.isSatisfied( - seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), false, false)) { + && (dataSource.isSingleDevice() + || tsFileResource.isSatisfied( + seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), false, false))) { break; } curUnseqFileIndex++; @@ -1491,8 +1493,9 @@ public class SeriesScanUtil { while (dataSource.hasNextSeqResource(curSeqFileIndex, getAscending())) { TsFileResource tsFileResource = dataSource.getSeqResourceByIndex(curSeqFileIndex); if (tsFileResource != null - && tsFileResource.isSatisfied( - seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), true, false)) { + && (dataSource.isSingleDevice() + || tsFileResource.isSatisfied( + seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), true, false))) { break; } curSeqFileIndex++; @@ -1505,8 +1508,9 @@ public class SeriesScanUtil { while (dataSource.hasNextUnseqResource(curUnseqFileIndex)) { TsFileResource tsFileResource = dataSource.getUnseqResourceByIndex(curUnseqFileIndex); if (tsFileResource != null - && tsFileResource.isSatisfied( - seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), false, false)) { + && (dataSource.isSingleDevice() + || tsFileResource.isSatisfied( + seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), false, false))) { break; } curUnseqFileIndex++; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/QueryDataSource.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/QueryDataSource.java index 41b45bd3641..87dabd465c0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/QueryDataSource.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/QueryDataSource.java @@ -43,6 +43,8 @@ public class QueryDataSource { private final List<TsFileResource> unseqResources; + private boolean isSingleDevice; + /* The traversal order of unseqResources (different for each device) */ private int[] unSeqFileOrderIndex; @@ -124,4 +126,12 @@ public class QueryDataSource { } this.unSeqFileOrderIndex = unSeqFileOrderIndexArray; } + + public boolean isSingleDevice() { + return isSingleDevice; + } + + public void setSingleDevice(boolean singleDevice) { + isSingleDevice = singleDevice; + } }
