You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by le...@apache.org on 2023/02/03 15:50:42 UTC
[iotdb] 22/28: for pointsTraversed
This is an automated email from the ASF dual-hosted git repository.
leirui pushed a commit to branch research/M4-visualization
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a52a15d960b37bd369a3616e679e9e9bf87ad62f
Author: Lei Rui <10...@qq.com>
AuthorDate: Wed Feb 1 16:20:00 2023 +0800
for pointsTraversed
---
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 2 +-
.../apache/iotdb/db/engine/cache/ChunkCache.java | 2 +-
.../dataset/groupby/LocalGroupByExecutor4CPV.java | 6 ++++++
.../org/apache/iotdb/db/service/TSServiceImpl.java | 2 +-
.../org/apache/iotdb/db/utils/FileLoaderUtils.java | 2 +-
.../iotdb/tsfile/read/common/ChunkSuit4CPV.java | 9 +++++++++
.../iotdb/tsfile/read/common}/IOMonitor.java | 23 +++++++++++++++++++++-
.../iotdb/tsfile/read/reader/page/PageReader.java | 3 +++
8 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index f45461a069..cee0f8e24b 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -153,7 +153,7 @@ public class IoTDBConfig {
private int flushWalThreshold = 10000;
/** this variable set timestamp precision as millisecond, microsecond or nanosecond */
- private String timestampPrecision = "ms";
+ private String timestampPrecision = "ns";
/**
* The cycle when write ahead log is periodically forced to be written to disk(in milliseconds) If
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
index 02a1f5ab20..0e96e2a4cc 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.engine.cache;
-import org.apache.iotdb.db.IOMonitor;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.query.control.FileReaderManager;
@@ -27,6 +26,7 @@ import org.apache.iotdb.db.utils.TestOnly;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
import org.apache.iotdb.tsfile.read.common.Chunk;
+import org.apache.iotdb.tsfile.read.common.IOMonitor;
import org.apache.iotdb.tsfile.utils.RamUsageEstimator;
import com.github.benmanes.caffeine.cache.Caffeine;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor4CPV.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor4CPV.java
index d961bbf02a..568d9a9cac 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor4CPV.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor4CPV.java
@@ -291,6 +291,7 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor {
.setDeleteIntervalList(chunkSuit4CPV.getChunkMetadata().getDeleteIntervalList());
}
// TODO chunk data read operation (c): get all data points
+ // (c) get all data points
chunkSuit4CPV.getPageReader().updateBPTP(chunkSuit4CPV);
// TODO check if empty
if (chunkSuit4CPV.statistics.getCount() == 0) {
@@ -376,6 +377,7 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor {
// WHICH WILL INTRODUCE BUGS!
chunkSuit4CPV.setPageReader(pageReader);
}
+ // (a) check existence of data point at a timestamp:
isUpdate = chunkSuit4CPV.checkIfExist(candidateTimestamp);
if (isUpdate) { // 提前结束对overlaps块的scan,因为已经找到一个update点证明candidate失效
break;
@@ -492,6 +494,7 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor {
.setDeleteIntervalList(chunkSuit4CPV.getChunkMetadata().getDeleteIntervalList());
}
// TODO chunk data read operation (c): get all data points
+ // (c) get all data points
chunkSuit4CPV.getPageReader().updateBPTP(chunkSuit4CPV);
// TODO check if empty
if (chunkSuit4CPV.statistics.getCount() == 0) {
@@ -582,6 +585,7 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor {
// WHICH WILL INTRODUCE BUGS!
chunkSuit4CPV.setPageReader(pageReader);
}
+ // (a) check existence of data point at a timestamp
isUpdate = chunkSuit4CPV.checkIfExist(candidateTimestamp);
if (isUpdate) { // 提前结束对overlaps块的scan,因为已经找到一个update点证明candidate失效
break;
@@ -670,6 +674,7 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor {
susp_candidate.setPageReader(pageReader);
}
// TODO update FP equal to or after statistics.getEndTime
+ // (b) get the closest data point after or before a timestamp
susp_candidate.updateFPwithTheClosetPointEqualOrAfter(
susp_candidate.getStatistics().getStartTime()); // TODO DEBUG
susp_candidate.setLazyLoad(false); // DO NOT FORGET THIS!!!
@@ -778,6 +783,7 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor {
susp_candidate.setPageReader(pageReader);
}
// TODO update FP equal to or after statistics.getEndTime
+ // (b) get the closest data point after or before a timestamp
susp_candidate.updateLPwithTheClosetPointEqualOrBefore(
susp_candidate.getStatistics().getEndTime()); // TODO DEBUG
susp_candidate.setLazyLoad(false); // TODO DO NOT FORGET THIS!!!
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 4b6db1bbaf..00c01bb37d 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
@@ -18,7 +18,6 @@
*/
package org.apache.iotdb.db.service;
-import org.apache.iotdb.db.IOMonitor;
import org.apache.iotdb.db.auth.AuthException;
import org.apache.iotdb.db.auth.AuthorityChecker;
import org.apache.iotdb.db.auth.authorizer.BasicAuthorizer;
@@ -128,6 +127,7 @@ import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.iotdb.tsfile.read.common.IOMonitor;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
index 7d2b9dc5cd..fd7b6f4cb1 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
@@ -18,7 +18,6 @@
*/
package org.apache.iotdb.db.utils;
-import org.apache.iotdb.db.IOMonitor;
import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache;
import org.apache.iotdb.db.engine.modification.Modification;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
@@ -34,6 +33,7 @@ import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata;
import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
import org.apache.iotdb.tsfile.read.common.Chunk;
+import org.apache.iotdb.tsfile.read.common.IOMonitor;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.read.controller.IChunkLoader;
import org.apache.iotdb.tsfile.read.filter.basic.Filter;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/ChunkSuit4CPV.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/ChunkSuit4CPV.java
index 55116a7619..d61d14e193 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/ChunkSuit4CPV.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/ChunkSuit4CPV.java
@@ -254,13 +254,16 @@ public class ChunkSuit4CPV {
if (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) {
while (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) {
estimatedPos++;
+ IOMonitor.incPointsTravered();
}
} else if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) {
while (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) {
estimatedPos--;
+ IOMonitor.incPointsTravered();
}
if (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) {
estimatedPos++;
+ IOMonitor.incPointsTravered();
} // else equal
} // else equal
this.startPos = estimatedPos; // note this
@@ -315,13 +318,16 @@ public class ChunkSuit4CPV {
if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) {
while (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) {
estimatedPos--;
+ IOMonitor.incPointsTravered();
}
} else if (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) {
while (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) {
estimatedPos++;
+ IOMonitor.incPointsTravered();
}
if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) {
estimatedPos--;
+ IOMonitor.incPointsTravered();
} // else equal
} // else equal
this.endPos = estimatedPos; // note this
@@ -375,13 +381,16 @@ public class ChunkSuit4CPV {
if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) {
while (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) {
estimatedPos--;
+ IOMonitor.incPointsTravered();
}
} else if (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) {
while (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) {
estimatedPos++;
+ IOMonitor.incPointsTravered();
}
if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) {
estimatedPos--;
+ IOMonitor.incPointsTravered();
} // else equal
} // else equal
diff --git a/server/src/main/java/org/apache/iotdb/db/IOMonitor.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IOMonitor.java
similarity index 89%
rename from server/src/main/java/org/apache/iotdb/db/IOMonitor.java
rename to tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IOMonitor.java
index 698aa10cb3..3bfed74089 100644
--- a/server/src/main/java/org/apache/iotdb/db/IOMonitor.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IOMonitor.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.iotdb.db;
+package org.apache.iotdb.tsfile.read.common;
import java.util.ArrayList;
import java.util.List;
@@ -34,6 +34,8 @@ public class IOMonitor {
public static long totalTime;
public static String sql;
+ public static long pointsTraversed;
+
public static List<Long> metaIOTimes = new ArrayList<>();
public static List<Long> dataIOTimes = new ArrayList<>();
public static List<Long> readMemChunkTimes = new ArrayList<>();
@@ -44,6 +46,8 @@ public class IOMonitor {
public static List<String> sqls = new ArrayList<>();
public static List<Long> totalTimes = new ArrayList<>();
+ public static List<Long> pointsTraversedList = new ArrayList<>();
+
public static boolean isSet = false;
public static void incReadMemChunkTime(long v) {
@@ -58,11 +62,20 @@ public class IOMonitor {
readMemChunkNum = 0;
}
+ public static void resetPointsTraversed() {
+ pointsTraversedList.add(pointsTraversed);
+ pointsTraversed = 0;
+ }
+
public static void incMeta(long v) {
metaIOTime += v;
metaIONum++;
}
+ public static void incPointsTravered() {
+ pointsTraversed++;
+ }
+
private static void resetMeta() {
metaIOTimes.add(metaIOTime);
metaIONums.add(metaIONum);
@@ -109,6 +122,7 @@ public class IOMonitor {
resetReadMemChunkTime();
sqls.add(sql);
sql = null;
+ resetPointsTraversed();
}
// private static double getAvg(List<Long> vals) {
@@ -148,6 +162,9 @@ public class IOMonitor {
dataIOTimes.clear();
sqls.clear();
totalTimes.clear();
+
+ pointsTraversedList.clear();
+ pointsTraversed = 0;
}
public static void finish() {
@@ -177,6 +194,8 @@ public class IOMonitor {
+ readMemChunkNums.get(i)
+ "\t total: \t"
+ totalTimes.get(i)
+ + "\t pointsTraversed: \t"
+ + pointsTraversedList.get(i)
+ "\n";
}
ret +=
@@ -194,6 +213,8 @@ public class IOMonitor {
+ getSumInteger(readMemChunkNums)
+ "\t avg total time: \t"
+ getSumLong(totalTimes)
+ + "\t points traversed: \t"
+ + getSumLong(pointsTraversedList)
+ "\t isSet: \t"
+ isSet;
return ret;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
index cd67765f45..f3e300a7ea 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
import org.apache.iotdb.tsfile.read.common.BatchData;
import org.apache.iotdb.tsfile.read.common.BatchDataFactory;
import org.apache.iotdb.tsfile.read.common.ChunkSuit4CPV;
+import org.apache.iotdb.tsfile.read.common.IOMonitor;
import org.apache.iotdb.tsfile.read.common.TimeRange;
import org.apache.iotdb.tsfile.read.filter.basic.Filter;
import org.apache.iotdb.tsfile.read.filter.operator.AndFilter;
@@ -136,6 +137,7 @@ public class PageReader implements IPageReader {
// TODO update FP,LP with the help of stepRegress index. BP/TP not update here.
int FP_pos = -1;
int LP_pos = -1;
+ // (b) get the closest data point after or before a timestamp
if (leftEndIncluded > chunkSuit4CPV.statistics.getStartTime()) {
FP_pos = chunkSuit4CPV.updateFPwithTheClosetPointEqualOrAfter(leftEndIncluded);
}
@@ -182,6 +184,7 @@ public class PageReader implements IPageReader {
// [startPos,endPos] definitely for curStartTime interval, thanks to split4CPV
int count = 0; // update here, not in statistics
for (int pos = chunkSuit4CPV.startPos; pos <= chunkSuit4CPV.endPos; pos++) {
+ IOMonitor.incPointsTravered();
long timestamp = timeBuffer.getLong(pos * 8);
switch (dataType) {
case INT64: