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:35 UTC
[iotdb] 15/28: update modifyChunkMetadata optimize the double-loop for chunkmetadata and deletions
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 84bd6f1e356cb92922f359873fe3cc4b207a12c5
Author: Lei Rui <10...@qq.com>
AuthorDate: Fri Jan 27 23:27:31 2023 +0800
update modifyChunkMetadata optimize the double-loop for chunkmetadata and deletions
---
.../resources/conf/iotdb-engine.properties | 2 +-
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 8 ++++----
.../java/org/apache/iotdb/db/utils/QueryUtils.java | 24 ++++++++++++++--------
.../iotdb/tsfile/file/metadata/ChunkMetadata.java | 7 ++++++-
4 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/server/src/assembly/resources/conf/iotdb-engine.properties b/server/src/assembly/resources/conf/iotdb-engine.properties
index 209e4fc389..4a9b6799ad 100644
--- a/server/src/assembly/resources/conf/iotdb-engine.properties
+++ b/server/src/assembly/resources/conf/iotdb-engine.properties
@@ -20,7 +20,7 @@
####################
### enable CPV
####################
-enable_CPV=false
+enable_CPV=true
####################
### Web Page Configuration
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 e9d333f0e8..f45461a069 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
@@ -266,10 +266,10 @@ public class IoTDBConfig {
private String indexRootFolder = "data" + File.separator + "index";
/** When a unSequence TsFile's file size (in byte) exceed this, the TsFile is forced closed. */
- private long unSeqTsFileSize = 1L;
+ private long unSeqTsFileSize = 1073741824;
/** When a sequence TsFile's file size (in byte) exceed this, the TsFile is forced closed. */
- private long seqTsFileSize = 1L;
+ private long seqTsFileSize = 1073741824;
/** When a memTable's size (in byte) exceeds this, the memtable is flushed to disk. */
private long memtableSizeThreshold = 1024 * 1024 * 1024L;
@@ -328,7 +328,7 @@ public class IoTDBConfig {
private int mergePagePointNumberThreshold = 100;
/** LEVEL_COMPACTION, NO_COMPACTION */
- private CompactionStrategy compactionStrategy = CompactionStrategy.LEVEL_COMPACTION;
+ private CompactionStrategy compactionStrategy = CompactionStrategy.NO_COMPACTION;
/**
* Works when the compaction_strategy is LEVEL_COMPACTION. Whether to merge unseq files into seq
@@ -431,7 +431,7 @@ public class IoTDBConfig {
/** Is performance tracing enable. */
private boolean enablePerformanceTracing = false;
- private boolean enableCPV = false;
+ private boolean enableCPV = true;
/** The display of stat performance interval in ms. */
private long performanceStatDisplayInterval = 60000;
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
index 8da3273068..9863716ba0 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
@@ -54,18 +54,24 @@ public class QueryUtils {
List<Deletion> deletions =
modifications.stream().map(e -> (Deletion) e).sorted().collect(Collectors.toList());
+ // sort chunkMetadatas by startTime
+ List<ChunkMetadata> sortedChunkMetadata =
+ chunkMetaData.stream().map(e -> (ChunkMetadata) e).sorted().collect(Collectors.toList());
+
+ // TODO add startPos for chunk to iterate deletes to speed up
+ int deleteStartIdx = 0;
// 对于每个chunkMetadata,先过滤掉时间范围上不重叠的删除操作,然后再根据版本高低判断是否应用mod
- for (int metaIndex = 0; metaIndex < chunkMetaData.size(); metaIndex++) {
- ChunkMetadata metaData = chunkMetaData.get(metaIndex);
- long startTime = metaData.getStartTime();
- long endTime = metaData.getEndTime();
- for (Deletion deletion : deletions) {
- long deleteStartTime = deletion.getStartTime();
- long deleteEndTime = deletion.getEndTime();
- if (deleteStartTime > endTime) {
+ for (int metaIndex = 0; metaIndex < sortedChunkMetadata.size(); metaIndex++) {
+ ChunkMetadata metaData = sortedChunkMetadata.get(metaIndex);
+ // for (Deletion deletion : deletions) {
+ for (int j = deleteStartIdx; j < deletions.size(); j++) {
+ // TODO use deleteStartIdx to avoid iterate from the first delete
+ Deletion deletion = deletions.get(j);
+ if (deletion.getStartTime() > metaData.getEndTime()) {
break;
}
- if (startTime > deleteEndTime) {
+ if (metaData.getStartTime() > deletion.getEndTime()) {
+ deleteStartIdx = j + 1; // TODO update startPos for chunk to iterate deletes to speed up
continue;
}
// then deals with deletes that overlap in time with the chunk
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
index 4ce0d92e9b..60494e223a 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
@@ -34,7 +34,7 @@ import java.util.List;
import java.util.Objects;
/** Metadata of one chunk. */
-public class ChunkMetadata {
+public class ChunkMetadata implements Comparable<ChunkMetadata> {
private String measurementUid;
@@ -117,6 +117,11 @@ public class ChunkMetadata {
// this.version = chunkMetadata.version;
// }
+ @Override
+ public int compareTo(ChunkMetadata chunkMetadata) {
+ return Long.compare(statistics.getStartTime(), chunkMetadata.getStartTime());
+ }
+
@Override
public String toString() {
return String.format(