This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new c84771b [IOTDB-1152] optimize regular data size in traversing (#2667)
c84771b is described below
commit c84771ba7a7821c9161d14fb6771c4094a767118
Author: wangchao316 <[email protected]>
AuthorDate: Tue Feb 23 10:28:41 2021 +0800
[IOTDB-1152] optimize regular data size in traversing (#2667)
* IOTDB-1152 optimize regular data size in traversing
---
.../iotdb/tsfile/encoding/encoder/RegularDataEncoder.java | 8 ++++++--
.../decoder/regular/RegularDataEncoderIntegerTest.java | 13 +++++++++++++
.../decoder/regular/RegularDataEncoderLongTest.java | 13 +++++++++++++
3 files changed, 32 insertions(+), 2 deletions(-)
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/RegularDataEncoder.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/RegularDataEncoder.java
index 9dcf82a..7422263 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/RegularDataEncoder.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/RegularDataEncoder.java
@@ -51,6 +51,8 @@ public abstract class RegularDataEncoder extends Encoder {
protected int writeIndex = -1;
+ protected int dataTotal;
+
/**
* constructor of RegularDataEncoder.
*
@@ -185,6 +187,7 @@ public abstract class RegularDataEncoder extends Encoder {
}
firstValue = data[0];
if (isMissingPoint) {
+ dataTotal = writeIndex;
newBlockSize = ((data[writeIndex - 1] - data[0]) / minDeltaBase) + 1;
writeIndex = newBlockSize;
}
@@ -220,7 +223,7 @@ public abstract class RegularDataEncoder extends Encoder {
bitmap = new BitSet(newBlockSize);
bitmap.flip(0, newBlockSize);
int offset = 0;
- for (int i = 1; i < missingPointData.length; i++) {
+ for (int i = 1; i < dataTotal; i++) {
int delta = missingPointData[i] - missingPointData[i - 1];
if (delta != minDeltaBase) {
int missingPointNum = (int) (delta / minDeltaBase) - 1;
@@ -311,6 +314,7 @@ public abstract class RegularDataEncoder extends Encoder {
}
firstValue = data[0];
if (isMissingPoint) {
+ dataTotal = writeIndex;
newBlockSize = (int) (((data[writeIndex - 1] - data[0]) /
minDeltaBase) + 1);
writeIndex = newBlockSize;
}
@@ -346,7 +350,7 @@ public abstract class RegularDataEncoder extends Encoder {
bitmap = new BitSet(newBlockSize);
bitmap.flip(0, newBlockSize);
int offset = 0;
- for (int i = 1; i < missingPointData.length; i++) {
+ for (int i = 1; i < dataTotal; i++) {
long delta = missingPointData[i] - missingPointData[i - 1];
if (delta != minDeltaBase) {
int missingPointNum = (int) (delta / minDeltaBase) - 1;
diff --git
a/tsfile/src/test/java/org/apache/iotdb/tsfile/encoding/decoder/regular/RegularDataEncoderIntegerTest.java
b/tsfile/src/test/java/org/apache/iotdb/tsfile/encoding/decoder/regular/RegularDataEncoderIntegerTest.java
index 3ea0484..97a7781 100644
---
a/tsfile/src/test/java/org/apache/iotdb/tsfile/encoding/decoder/regular/RegularDataEncoderIntegerTest.java
+++
b/tsfile/src/test/java/org/apache/iotdb/tsfile/encoding/decoder/regular/RegularDataEncoderIntegerTest.java
@@ -98,6 +98,19 @@ public class RegularDataEncoderIntegerTest {
shouldReadAndWrite(data, ROW_NUM);
}
+ @Test
+ public void testMissingPointsDataSize() throws IOException {
+ int[] originalData = new int[] {1000, 1100, 1200, 1300, 1500, 2000};
+ out = new ByteArrayOutputStream();
+ writeData(originalData, 6);
+ byte[] page = out.toByteArray();
+ buffer = ByteBuffer.wrap(page);
+ int i = 0;
+ while (regularDataDecoder.hasNext(buffer)) {
+ assertEquals(originalData[i++], regularDataDecoder.readInt(buffer));
+ }
+ }
+
private int[] getMissingPointData(int dataSize, int missingPointInterval) {
ROW_NUM = dataSize;
diff --git
a/tsfile/src/test/java/org/apache/iotdb/tsfile/encoding/decoder/regular/RegularDataEncoderLongTest.java
b/tsfile/src/test/java/org/apache/iotdb/tsfile/encoding/decoder/regular/RegularDataEncoderLongTest.java
index e53774a..e968c2d 100644
---
a/tsfile/src/test/java/org/apache/iotdb/tsfile/encoding/decoder/regular/RegularDataEncoderLongTest.java
+++
b/tsfile/src/test/java/org/apache/iotdb/tsfile/encoding/decoder/regular/RegularDataEncoderLongTest.java
@@ -139,6 +139,19 @@ public class RegularDataEncoderLongTest {
shouldReadAndWrite(data, ROW_NUM);
}
+ @Test
+ public void testMissingPointsDataSize() throws IOException {
+ long[] originalData = new long[] {1000, 1100, 1200, 1300, 1500, 2000};
+ out = new ByteArrayOutputStream();
+ writeData(originalData, 6);
+ byte[] page = out.toByteArray();
+ buffer = ByteBuffer.wrap(page);
+ int i = 0;
+ while (regularDataDecoder.hasNext(buffer)) {
+ assertEquals(originalData[i++], regularDataDecoder.readLong(buffer));
+ }
+ }
+
private long[] getMissingPointData(List<String> originalData, int
missingPointInterval) {
List<String> dates = originalData;