This is an automated email from the ASF dual-hosted git repository. jincheng pushed a commit to branch spotless in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit b5923438e50c01a4a92b390454693bdbdf1f079c Author: wangchao316 <[email protected]> AuthorDate: Tue Feb 9 22:04:18 2021 +0800 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 492e8eb..19502a8 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 @@ -49,6 +49,8 @@ public abstract class RegularDataEncoder extends Encoder { protected int writeIndex = -1; + protected int dataTotal; + /** * constructor of RegularDataEncoder. * @@ -183,6 +185,7 @@ public abstract class RegularDataEncoder extends Encoder { } firstValue = data[0]; if (isMissingPoint) { + dataTotal = writeIndex; newBlockSize = ((data[writeIndex - 1] - data[0]) / minDeltaBase) + 1; writeIndex = newBlockSize; } @@ -218,7 +221,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; @@ -309,6 +312,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; } @@ -344,7 +348,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 be08915..8baf651 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 @@ -96,6 +96,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 aaec9a3..34efa48 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 @@ -137,6 +137,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;
