You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2019/11/26 10:21:01 UTC

[incubator-iotdb] branch refine_digest created (now fc2fb42)

This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a change to branch refine_digest
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at fc2fb42  remove digest

This branch includes the following new commits:

     new fc2fb42  remove digest

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-iotdb] 01/01: remove digest

Posted by qi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a commit to branch refine_digest
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit fc2fb425595135cea15697cd53c7257f971b3c00
Author: qiaojialin <64...@qq.com>
AuthorDate: Tue Nov 26 18:20:37 2019 +0800

    remove digest
---
 .../resourceRelated/UnseqResourceMergeReader.java  |   8 +-
 .../apache/iotdb/db/tools/TsFileSketchTool.java    |   4 +-
 .../iotdb/tsfile/file/header/package-info.java     |   2 +-
 .../tsfile/file/metadata/ChunkGroupMetaData.java   |  53 -------
 .../iotdb/tsfile/file/metadata/ChunkMetaData.java  |  56 +-------
 .../tsfile/file/metadata/TsDeviceMetadata.java     |  58 --------
 .../file/metadata/statistics/BinaryStatistics.java |   2 +-
 .../file/metadata/statistics/DoubleStatistics.java |   2 +-
 .../file/metadata/statistics/Statistics.java       | 159 +++++----------------
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |  21 +--
 ...gestForFilter.java => StatisticsForFilter.java} |   8 +-
 .../iotdb/tsfile/read/filter/basic/Filter.java     |  10 +-
 .../tsfile/read/filter/operator/AndFilter.java     |   6 +-
 .../iotdb/tsfile/read/filter/operator/Eq.java      |  12 +-
 .../iotdb/tsfile/read/filter/operator/Gt.java      |  10 +-
 .../iotdb/tsfile/read/filter/operator/GtEq.java    |  10 +-
 .../iotdb/tsfile/read/filter/operator/Lt.java      |  10 +-
 .../iotdb/tsfile/read/filter/operator/LtEq.java    |  10 +-
 .../iotdb/tsfile/read/filter/operator/NotEq.java   |  12 +-
 .../tsfile/read/filter/operator/NotFilter.java     |   6 +-
 .../tsfile/read/filter/operator/OrFilter.java      |   6 +-
 .../read/reader/chunk/ChunkReaderWithFilter.java   |   6 +-
 .../reader/series/FileSeriesReaderWithFilter.java  |  14 +-
 .../tool/upgrade/TsfileUpgradeToolV0_8_0.java      |   4 +-
 .../iotdb/tsfile/utils/ReadWriteIOUtils.java       |   2 +
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  |   6 +-
 .../file/metadata/ChunkGroupMetaDataTest.java      |  52 -------
 .../tsfile/file/metadata/ChunkMetaDataTest.java    | 114 ---------------
 .../tsfile/file/metadata/TsDeviceMetadataTest.java |  64 ---------
 .../tsfile/file/metadata/utils/TestHelper.java     | 107 +-------------
 .../iotdb/tsfile/file/metadata/utils/Utils.java    |  14 +-
 .../iotdb/tsfile/read/filter/DigestFilterTest.java |  78 +++++-----
 32 files changed, 167 insertions(+), 759 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/resourceRelated/UnseqResourceMergeReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/resourceRelated/UnseqResourceMergeReader.java
index 6566770..f28dc35 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/resourceRelated/UnseqResourceMergeReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/resourceRelated/UnseqResourceMergeReader.java
@@ -39,7 +39,7 @@ import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.controller.ChunkLoaderImpl;
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
 /**
@@ -100,15 +100,15 @@ public class UnseqResourceMergeReader extends PriorityMergeReader {
         if (filter != null) {
           ByteBuffer minValue = null;
           ByteBuffer maxValue = null;
-          ByteBuffer[] statistics = chunkMetaData.getDigest().getStatistics();
+          ByteBuffer[] statistics = chunkMetaData.getStatistics().getStatisticBuffers();
           if (statistics != null) {
             minValue = statistics[Statistics.StatisticType.min_value.ordinal()]; // note still CAN be null
             maxValue = statistics[Statistics.StatisticType.max_value.ordinal()]; // note still CAN be null
           }
 
-          DigestForFilter digest = new DigestForFilter(chunkMetaData.getStartTime(),
+          StatisticsForFilter statisticsForFilter = new StatisticsForFilter(chunkMetaData.getStartTime(),
               chunkMetaData.getEndTime(), minValue, maxValue, chunkMetaData.getTsDataType());
-          if (!filter.satisfy(digest)) {
+          if (!filter.satisfy(statisticsForFilter)) {
             continue;
           }
         }
diff --git a/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java b/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java
index f6dc850..08ef921 100644
--- a/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java
+++ b/server/src/main/java/org/apache/iotdb/db/tools/TsFileSketchTool.java
@@ -110,7 +110,7 @@ public class TsFileSketchTool {
                 + chunkMetaData.getEndTime() + "], tsDataType:" + chunkMetaData.getTsDataType()
                 + ", \n" + String.format("%20s", "") + " \t" + statisticByteBufferToString(
                 chunkMetaData.getTsDataType(),
-                chunkMetaData.getDigest()));
+                chunkMetaData.getStatistics()));
         printlnBoth(pw, String.format("%20s", "") + "|\t\t[marker] 1");
         printlnBoth(pw, String.format("%20s", "") + "|\t\t[ChunkHeader]");
         Chunk chunk = reader.readMemChunk(chunkMetaData);
@@ -220,7 +220,7 @@ public class TsFileSketchTool {
   }
 
   private static String statisticByteBufferToString(TSDataType tsDataType, Statistics tsDigest) {
-    ByteBuffer[] statistics = tsDigest.getStatistics();
+    ByteBuffer[] statistics = tsDigest.getStatisticBuffers();
     if (statistics == null) {
       return "TsDigest:[]";
     }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/header/package-info.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/header/package-info.java
index fa36f3c..19c11bc 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/header/package-info.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/header/package-info.java
@@ -22,7 +22,7 @@ package org.apache.iotdb.tsfile.file.header;
  * CHUNK_GROUP_FOOTER and CHUNK_HEADER are used for parsing file.
  *
  * ChunkGroupMetadata and ChunkMetadata are used for locating the positions of ChunkGroup (footer)
- * and chunk (header),filtering data quickly, and thereby they have digest information.
+ * and chunk (header),filtering data quickly, and thereby they have statistics information.
  *
  * However, because Page has only the header structure, therefore, PageHeader has the both two
  * functions.
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaData.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaData.java
index 178b12e..41b2b5c 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaData.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaData.java
@@ -91,38 +91,6 @@ public class ChunkGroupMetaData {
   }
 
   /**
-   * deserialize from InputStream.
-   *
-   * @param inputStream inputStream
-   * @return ChunkGroupMetaData object
-   * @throws IOException IOException
-   */
-  public static ChunkGroupMetaData deserializeFrom(InputStream inputStream) throws IOException {
-    ChunkGroupMetaData chunkGroupMetaData = new ChunkGroupMetaData();
-
-    chunkGroupMetaData.deviceID = ReadWriteIOUtils.readString(inputStream);
-    chunkGroupMetaData.startOffsetOfChunkGroup = ReadWriteIOUtils.readLong(inputStream);
-    chunkGroupMetaData.endOffsetOfChunkGroup = ReadWriteIOUtils.readLong(inputStream);
-    chunkGroupMetaData.version = ReadWriteIOUtils.readLong(inputStream);
-
-    int size = ReadWriteIOUtils.readInt(inputStream);
-    chunkGroupMetaData.serializedSize = Integer.BYTES
-            + chunkGroupMetaData.deviceID.getBytes(TSFileConfig.STRING_CHARSET).length
-            + Integer.BYTES + Long.BYTES + Long.BYTES + Long.BYTES;
-
-    List<ChunkMetaData> chunkMetaDataList = new ArrayList<>();
-
-    for (int i = 0; i < size; i++) {
-      ChunkMetaData metaData = ChunkMetaData.deserializeFrom(inputStream);
-      chunkMetaDataList.add(metaData);
-      chunkGroupMetaData.serializedSize += metaData.getSerializedSize();
-    }
-    chunkGroupMetaData.chunkMetaDataList = chunkMetaDataList;
-
-    return chunkGroupMetaData;
-  }
-
-  /**
    * deserialize from ByteBuffer.
    *
    * @param buffer ByteBuffer
@@ -231,25 +199,4 @@ public class ChunkGroupMetaData {
     return byteLen;
   }
 
-  /**
-   * serialize to ByteBuffer.
-   *
-   * @param buffer ByteBuffer
-   * @return byte length
-   * @throws IOException IOException
-   */
-  public int serializeTo(ByteBuffer buffer) throws IOException {
-    int byteLen = 0;
-
-    byteLen += ReadWriteIOUtils.write(deviceID, buffer);
-    byteLen += ReadWriteIOUtils.write(startOffsetOfChunkGroup, buffer);
-    byteLen += ReadWriteIOUtils.write(endOffsetOfChunkGroup, buffer);
-    byteLen += ReadWriteIOUtils.write(version, buffer);
-
-    byteLen += ReadWriteIOUtils.write(chunkMetaDataList.size(), buffer);
-    for (ChunkMetaData chunkMetaData : chunkMetaDataList) {
-      byteLen += chunkMetaData.serializeTo(buffer);
-    }
-    return byteLen;
-  }
 }
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 0015a45..f9822ec 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
@@ -90,30 +90,6 @@ public class ChunkMetaData {
     this.endTime = endTime;
   }
 
-  /**
-   * deserialize from InputStream.
-   *
-   * @param inputStream InputStream
-   * @return ChunkMetaData object
-   * @throws IOException IOException
-   */
-  public static ChunkMetaData deserializeFrom(InputStream inputStream) throws IOException {
-    ChunkMetaData chunkMetaData = new ChunkMetaData();
-
-    chunkMetaData.measurementUid = ReadWriteIOUtils.readString(inputStream);
-
-    chunkMetaData.offsetOfChunkHeader = ReadWriteIOUtils.readLong(inputStream);
-
-    chunkMetaData.numOfPoints = ReadWriteIOUtils.readLong(inputStream);
-    chunkMetaData.startTime = ReadWriteIOUtils.readLong(inputStream);
-    chunkMetaData.endTime = ReadWriteIOUtils.readLong(inputStream);
-
-    chunkMetaData.tsDataType = ReadWriteIOUtils.readDataType(inputStream);
-
-    chunkMetaData.valuesStatistics = Statistics.deserializeFrom(inputStream, chunkMetaData.tsDataType);
-
-    return chunkMetaData;
-  }
 
   /**
    * deserialize from ByteBuffer.
@@ -146,7 +122,7 @@ public class ChunkMetaData {
             4 * Long.BYTES + // 4 long: offsetOfChunkHeader, numOfPoints, startTime, endTime
             TSDataType.getSerializedSize() + // TSDataType
             (valuesStatistics == null ? Statistics.getNullDigestSize()
-                    : valuesStatistics.getDigestSerializedSize()));
+                    : valuesStatistics.getStatisticsSerializedSize()));
     serializedSize += measurementUid.getBytes(TSFileConfig.STRING_CHARSET).length;  // measurementUid
     return serializedSize;
   }
@@ -177,12 +153,12 @@ public class ChunkMetaData {
     return measurementUid;
   }
 
-  public Statistics getDigest() {
+  public Statistics getStatistics() {
     return valuesStatistics;
   }
 
-  public void setDigest(Statistics digest) {
-    this.valuesStatistics = digest;
+  public void setStatistics(Statistics statistics) {
+    this.valuesStatistics = statistics;
 
   }
 
@@ -235,30 +211,6 @@ public class ChunkMetaData {
     return byteLen;
   }
 
-  /**
-   * serialize to ByteBuffer.
-   *
-   * @param buffer ByteBuffer
-   * @return length
-   */
-  public int serializeTo(ByteBuffer buffer) {
-    int byteLen = 0;
-
-    byteLen += ReadWriteIOUtils.write(measurementUid, buffer);
-    byteLen += ReadWriteIOUtils.write(offsetOfChunkHeader, buffer);
-    byteLen += ReadWriteIOUtils.write(numOfPoints, buffer);
-    byteLen += ReadWriteIOUtils.write(startTime, buffer);
-    byteLen += ReadWriteIOUtils.write(endTime, buffer);
-    byteLen += ReadWriteIOUtils.write(tsDataType, buffer);
-
-    if (valuesStatistics == null) {
-      byteLen += Statistics.serializeNullTo(buffer);
-    } else {
-      byteLen += valuesStatistics.serializeTo(buffer);
-    }
-    return byteLen;
-  }
-
   public long getVersion() {
     return version;
   }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsDeviceMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsDeviceMetadata.java
index 26034de..27babba 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsDeviceMetadata.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsDeviceMetadata.java
@@ -56,30 +56,6 @@ public class TsDeviceMetadata {
     // allowed to clair an empty TsDeviceMetadata whose fields will be assigned later.
   }
 
-  /**
-   * deserialize from the inputstream.
-   *
-   * @param inputStream -input stream to deserialize
-   * @return -device meta data
-   */
-  public static TsDeviceMetadata deserializeFrom(InputStream inputStream) throws IOException {
-    TsDeviceMetadata deviceMetadata = new TsDeviceMetadata();
-
-    deviceMetadata.startTime = ReadWriteIOUtils.readLong(inputStream);
-    deviceMetadata.endTime = ReadWriteIOUtils.readLong(inputStream);
-
-    int size = ReadWriteIOUtils.readInt(inputStream);
-    if (size > 0) {
-      List<ChunkGroupMetaData> chunkGroupMetaDataList = new ArrayList<>();
-      for (int i = 0; i < size; i++) {
-        chunkGroupMetaDataList.add(ChunkGroupMetaData.deserializeFrom(inputStream));
-      }
-      deviceMetadata.chunkGroupMetadataList = chunkGroupMetaDataList;
-    }
-
-    deviceMetadata.reCalculateSerializedSize();
-    return deviceMetadata;
-  }
 
   /**
    * deserialize from the given buffer.
@@ -120,17 +96,6 @@ public class TsDeviceMetadata {
   }
 
   /**
-   * set the ChunkGroupMetadataList and recalculate serialized size.
-   *
-   * @param chunkGroupMetadataList -use to set the ChunkGroupMetadataList and recalculate serialized
-   * size
-   */
-  public void setChunkGroupMetadataList(List<ChunkGroupMetaData> chunkGroupMetadataList) {
-    this.chunkGroupMetadataList = chunkGroupMetadataList;
-    reCalculateSerializedSize();
-  }
-
-  /**
    * add chunk group metadata to chunkGroups. THREAD NOT SAFE
    *
    * @param chunkGroup - chunk group metadata to add
@@ -187,29 +152,6 @@ public class TsDeviceMetadata {
     return byteLen;
   }
 
-  /**
-   * get the byte length of the given buffer.
-   *
-   * @param buffer -buffer to determine the byte length
-   * @return -byte length
-   */
-  public int serializeTo(ByteBuffer buffer) throws IOException {
-    int byteLen = 0;
-
-    byteLen += ReadWriteIOUtils.write(startTime, buffer);
-    byteLen += ReadWriteIOUtils.write(endTime, buffer);
-
-    if (chunkGroupMetadataList == null) {
-      byteLen += ReadWriteIOUtils.write(0, buffer);
-    } else {
-      byteLen += ReadWriteIOUtils.write(chunkGroupMetadataList.size(), buffer);
-      for (ChunkGroupMetaData chunkGroupMetaData : chunkGroupMetadataList) {
-        byteLen += chunkGroupMetaData.serializeTo(buffer);
-      }
-    }
-
-    return byteLen;
-  }
 
   @Override
   public String toString() {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
index 64dc577..3974c23 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/BinaryStatistics.java
@@ -204,7 +204,7 @@ public class BinaryStatistics extends Statistics<Binary> {
   }
 
   @Override
-  void deserialize(ByteBuffer byteBuffer) throws IOException {
+  void deserialize(ByteBuffer byteBuffer) {
     this.min = new Binary(
         ReadWriteIOUtils.readByteBufferWithSelfDescriptionLength(byteBuffer).array());
     this.max = new Binary(
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
index 250aaac..ecd3911 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/DoubleStatistics.java
@@ -202,7 +202,7 @@ public class DoubleStatistics extends Statistics<Double> {
   }
 
   @Override
-  void deserialize(ByteBuffer byteBuffer) throws IOException {
+  void deserialize(ByteBuffer byteBuffer) {
     this.min = ReadWriteIOUtils.readDouble(byteBuffer);
     this.max = ReadWriteIOUtils.readDouble(byteBuffer);
     this.first = ReadWriteIOUtils.readDouble(byteBuffer);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
index c7d5230..86eb31e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
@@ -24,9 +24,6 @@ import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
-
-import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
-import org.apache.iotdb.tsfile.encoding.common.EndianType;
 import org.apache.iotdb.tsfile.exception.write.UnknownColumnTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.reader.TsFileInput;
@@ -37,7 +34,7 @@ import org.slf4j.LoggerFactory;
 
 /**
  * This class is used for recording statistic information of each measurement in a delta file. While
- * writing processing, the processor records the digest information. Statistics includes maximum,
+ * writing processing, the processor records the statistics information. Statistics includes maximum,
  * minimum and null value count up to version 0.0.1.<br> Each data type extends this Statistic as
  * super class.<br>
  *
@@ -51,7 +48,7 @@ public abstract class Statistics<T> {
    */
   protected boolean isEmpty = true;
 
-  private ByteBuffer[] statistics;
+  private ByteBuffer[] buffers;
 
   /**
    * size of valid values in statistics. Note that some values in statistics can be null and thus
@@ -59,7 +56,7 @@ public abstract class Statistics<T> {
    */
   private int validSizeOfArray = 0;
 
-  private int digestSerializedSize = Integer.BYTES; // initialize for number of statistics
+  private int statisticsSerializedSize = Integer.BYTES; // initialize for number of statistics
 
   /**
    * static method providing statistic instance for respective data type.
@@ -142,7 +139,7 @@ public abstract class Statistics<T> {
   public abstract ByteBuffer getSumBytebuffer();
 
   /**
-   * merge parameter to this statistic. Including
+   * merge parameter to this statistic
    *
    * @param stats input statistics
    * @throws StatisticsClassException cannot merge statistics
@@ -322,66 +319,6 @@ public abstract class Statistics<T> {
     return ReadWriteIOUtils.write(0, outputStream);
   }
 
-  public static int serializeNullTo(ByteBuffer buffer) {
-    return ReadWriteIOUtils.write(0, buffer);
-  }
-
-  /**
-   * use given input stream to deserialize.
-   *
-   * @param inputStream -given input stream
-   * @return -an instance of TsDigest
-   */
-  public static Statistics deserializeFrom(InputStream inputStream, TSDataType dataType) throws IOException {
-    Statistics digest = getStatsByType(dataType);
-    int size = ReadWriteIOUtils.readInt(inputStream);
-    digest.validSizeOfArray = size;
-    digest.digestSerializedSize = Integer.BYTES;
-    if (size > 0) {
-      digest.statistics = new ByteBuffer[StatisticType.getTotalTypeNum()];
-      ByteBuffer value;
-      // check if it's an old version of TsFile
-      String key = "";
-      if (TSFileDescriptor.getInstance().getConfig().getEndian().equals(EndianType.LITTLE_ENDIAN.toString())) {
-        for (int i = 0; i < size; i++) {
-          key = ReadWriteIOUtils.readString(inputStream);
-          value = ReadWriteIOUtils.readByteBufferWithSelfDescriptionLength(inputStream);
-          short n;
-          switch (key) {
-            case "min_value":
-              n = 0;
-              break;
-            case "max_value":
-              n = 1;
-              break;
-            case "first":
-              n = 2;
-              break;
-            case "last":
-              n = 3;
-              break;
-            case "sum":
-              n = 4;
-              break;
-            default:
-              n = -1;
-          }
-          digest.statistics[n] = value;
-          digest.digestSerializedSize += Short.BYTES + Integer.BYTES + value.remaining();
-        }
-      }
-      else {
-        for (int i = 0; i < size; i++) {
-          short n = ReadWriteIOUtils.readShort(inputStream);
-          value = ReadWriteIOUtils.readByteBufferWithSelfDescriptionLength(inputStream);
-          digest.statistics[n] = value;
-          digest.digestSerializedSize += Short.BYTES + Integer.BYTES + value.remaining();
-        }
-      }
-    } // else left digest.statistics as null
-    return digest;
-  }
-
   /**
    * use given buffer to deserialize.
    *
@@ -389,12 +326,12 @@ public abstract class Statistics<T> {
    * @return -an instance of TsDigest
    */
   public static Statistics deserializeFrom(ByteBuffer buffer, TSDataType dataType) {
-    Statistics digest = getStatsByType(dataType);
+    Statistics statistics = getStatsByType(dataType);
     int size = ReadWriteIOUtils.readInt(buffer);
-    digest.validSizeOfArray = size;
-    digest.digestSerializedSize = Integer.BYTES;
+    statistics.validSizeOfArray = size;
+    statistics.statisticsSerializedSize = Integer.BYTES;
     if (size > 0) {
-      digest.statistics = new ByteBuffer[StatisticType.getTotalTypeNum()];
+      statistics.buffers = new ByteBuffer[StatisticType.getTotalTypeNum()];
       ByteBuffer value;
       // check if it's old version of TsFile
       buffer.mark();
@@ -425,8 +362,8 @@ public abstract class Statistics<T> {
             default:
               n = -1;
           }
-          digest.statistics[n] = value;
-          digest.digestSerializedSize += Short.BYTES + Integer.BYTES + value.remaining();
+          statistics.buffers[n] = value;
+          statistics.statisticsSerializedSize += Short.BYTES + Integer.BYTES + value.remaining();
         }
       }
       else {
@@ -434,23 +371,23 @@ public abstract class Statistics<T> {
         for (int i = 0; i < size; i++) {
           short n = ReadWriteIOUtils.readShort(buffer);
           value = ReadWriteIOUtils.readByteBufferWithSelfDescriptionLength(buffer);
-          digest.statistics[n] = value;
-          digest.digestSerializedSize += Short.BYTES + Integer.BYTES + value.remaining();
+          statistics.buffers[n] = value;
+          statistics.statisticsSerializedSize += Short.BYTES + Integer.BYTES + value.remaining();
         }
       }
-    } // else left digest.statistics as null
+    } // else left statistics as null
 
-    return digest;
+    return statistics;
   }
 
   private void reCalculate() {
     validSizeOfArray = 0;
-    digestSerializedSize = Integer.BYTES;
-    if (statistics != null) {
-      for (ByteBuffer value : statistics) {
+    statisticsSerializedSize = Integer.BYTES;
+    if (buffers != null) {
+      for (ByteBuffer value : buffers) {
         if (value != null) {
           // StatisticType serialized value, byteBuffer.capacity and byteBuffer.array
-          digestSerializedSize += Short.BYTES + Integer.BYTES + value.remaining();
+          statisticsSerializedSize += Short.BYTES + Integer.BYTES + value.remaining();
           validSizeOfArray++;
         }
       }
@@ -460,23 +397,23 @@ public abstract class Statistics<T> {
   /**
    * get statistics of the current object.
    */
-  public ByteBuffer[] getStatistics() {
-    return statistics; //TODO unmodifiable
+  public ByteBuffer[] getStatisticBuffers() {
+    return buffers; //TODO unmodifiable
   }
 
-  public void setStatistics(ByteBuffer[] statistics) throws IOException {
-    if (statistics != null && statistics.length != StatisticType.getTotalTypeNum()) {
+  public void setStatisticBuffers(ByteBuffer[] buffers) throws IOException {
+    if (buffers != null && buffers.length != StatisticType.getTotalTypeNum()) {
       throw new IOException(String.format(
         "The length of array of statistics doesn't equal StatisticType.getTotalTypeNum() %d",
         StatisticType.getTotalTypeNum()));
     }
-    this.statistics = statistics;
+    this.buffers = buffers;
     reCalculate(); // DO NOT REMOVE THIS
   }
 
   @Override
   public String toString() {
-    return statistics != null ? Arrays.toString(statistics) : "";
+    return buffers != null ? Arrays.toString(buffers) : "";
   }
 
   /**
@@ -491,32 +428,10 @@ public abstract class Statistics<T> {
       byteLen += ReadWriteIOUtils.write(0, outputStream);
     } else {
       byteLen += ReadWriteIOUtils.write(validSizeOfArray, outputStream);
-      for (int i = 0; i < statistics.length; i++) {
-        if (statistics[i] != null) {
+      for (int i = 0; i < buffers.length; i++) {
+        if (buffers[i] != null) {
           byteLen += ReadWriteIOUtils.write((short) i, outputStream);
-          byteLen += ReadWriteIOUtils.write(statistics[i], outputStream);
-        }
-      }
-    }
-    return byteLen;
-  }
-
-  /**
-   * use given buffer to serialize.
-   *
-   * @param buffer -given buffer
-   * @return -byte length
-   */
-  public int serializeTo(ByteBuffer buffer) {
-    int byteLen = 0;
-    if (validSizeOfArray == 0) {
-      byteLen += ReadWriteIOUtils.write(0, buffer);
-    } else {
-      byteLen += ReadWriteIOUtils.write(validSizeOfArray, buffer);
-      for (int i = 0; i < statistics.length; i++) {
-        if (statistics[i] != null) {
-          byteLen += ReadWriteIOUtils.write((short) i, buffer);
-          byteLen += ReadWriteIOUtils.write(statistics[i], buffer);
+          byteLen += ReadWriteIOUtils.write(buffers[i], outputStream);
         }
       }
     }
@@ -528,8 +443,8 @@ public abstract class Statistics<T> {
    *
    * @return -serializedSize
    */
-  public int getDigestSerializedSize() {
-    return digestSerializedSize;
+  public int getStatisticsSerializedSize() {
+    return statisticsSerializedSize;
   }
 
   @Override
@@ -540,20 +455,20 @@ public abstract class Statistics<T> {
     if (o == null || getClass() != o.getClass()) {
       return false;
     }
-    Statistics digest = (Statistics) o;
-    if (digestSerializedSize != digest.digestSerializedSize || validSizeOfArray != digest.validSizeOfArray
-      || ((statistics == null) ^ (digest.statistics == null))) {
+    Statistics statistics = (Statistics) o;
+    if (statisticsSerializedSize != statistics.statisticsSerializedSize || validSizeOfArray != statistics.validSizeOfArray
+      || ((this.buffers == null) ^ (statistics.buffers == null))) {
       return false;
     }
 
-    if (statistics != null) {
-      for (int i = 0; i < statistics.length; i++) {
-        if ((statistics[i] == null) ^ (digest.statistics[i] == null)) {
+    if (this.buffers != null) {
+      for (int i = 0; i < this.buffers.length; i++) {
+        if ((this.buffers[i] == null) ^ (statistics.buffers[i] == null)) {
           // one is null and the other is not null
           return false;
         }
-        if (statistics[i] != null) {
-          if (!statistics[i].equals(digest.statistics[i])) {
+        if (this.buffers[i] != null) {
+          if (!this.buffers[i].equals(statistics.buffers[i])) {
             return false;
           }
         }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index 7fcce1f..c8990eb 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@ -285,23 +285,6 @@ public class TsFileSequenceReader implements AutoCloseable {
   }
 
   /**
-   * @return get the position after the last chunk group in the file
-   */
-  public long getPositionOfFirstDeviceMetaIndex() throws IOException {
-    TsFileMetaData metaData = readFileMetadata();
-    Optional<Long> data = metaData.getDeviceMap().values().stream()
-        .map(TsDeviceMetadataIndex::getOffset)
-        .min(Comparator.comparing(Long::valueOf));
-    if (data.isPresent()) {
-      return data.get();
-    } else {
-      //no real data
-      return TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER
-          .getBytes().length;
-    }
-  }
-
-  /**
    * this function does not modify the position of the file reader.
    */
   public TsDeviceMetadata readTsDeviceMetaData(TsDeviceMetadataIndex index) throws IOException {
@@ -673,8 +656,8 @@ public class TsFileSequenceReader implements AutoCloseable {
             statisticsArray[Statistics.StatisticType.sum_value.ordinal()] = ByteBuffer
                 .wrap(chunkStatistics.getSumBytes());
             Statistics tsDigest = Statistics.getStatsByType(dataType);
-            tsDigest.setStatistics(statisticsArray);
-            currentChunk.setDigest(tsDigest);
+            tsDigest.setStatisticBuffers(statisticsArray);
+            currentChunk.setStatistics(tsDigest);
             chunks.add(currentChunk);
             numOfPoints = 0;
             chunkCnt++;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/DigestForFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/StatisticsForFilter.java
similarity index 94%
rename from tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/DigestForFilter.java
rename to tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/StatisticsForFilter.java
index e4921d6..0b35569 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/DigestForFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/StatisticsForFilter.java
@@ -25,9 +25,9 @@ import org.apache.iotdb.tsfile.utils.Binary;
 import org.apache.iotdb.tsfile.utils.BytesUtils;
 
 /**
- * class to construct digest.
+ * class to construct statistics.
  */
-public class DigestForFilter {
+public class StatisticsForFilter {
 
   private ByteBuffer minValue;
   private ByteBuffer maxValue;
@@ -44,7 +44,7 @@ public class DigestForFilter {
    * @param maxValue MUST be ByteBuffer
    * @param type time series data type
    */
-  public DigestForFilter(long minTime, long maxTime, ByteBuffer minValue, ByteBuffer maxValue,
+  public StatisticsForFilter(long minTime, long maxTime, ByteBuffer minValue, ByteBuffer maxValue,
       TSDataType type) {
     this.minTime = minTime;
     this.maxTime = maxTime;
@@ -62,7 +62,7 @@ public class DigestForFilter {
    * @param maxValue MUST be byte[]
    * @param type time series data type
    */
-  public DigestForFilter(long minTime, long maxTime, byte[] minValue, byte[] maxValue,
+  public StatisticsForFilter(long minTime, long maxTime, byte[] minValue, byte[] maxValue,
       TSDataType type) {
     this.minTime = minTime;
     this.maxTime = maxTime;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/basic/Filter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/basic/Filter.java
index a37ccd2..a3b8081 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/basic/Filter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/basic/Filter.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.tsfile.read.filter.basic;
 
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 
 /**
  * Filter is a top level filter abstraction.
@@ -27,12 +27,12 @@ import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
 public interface Filter {
 
   /**
-   * To examine whether the digest is satisfied with the filter.
+   * To examine whether the statistics is satisfied with the filter.
    *
-   * @param digest
-   *            digest with min time, max time, min value, max value.
+   * @param statistics
+   *            statistics with min time, max time, min value, max value.
    */
-  boolean satisfy(DigestForFilter digest);
+  boolean satisfy(StatisticsForFilter statistics);
 
   /**
    * To examine whether the single point(with time and value) is satisfied with the filter.
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
index 8b6e5db..ca0b490 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.BinaryFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
@@ -34,8 +34,8 @@ public class AndFilter extends BinaryFilter {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
-    return left.satisfy(digest) && right.satisfy(digest);
+  public boolean satisfy(StatisticsForFilter statistics) {
+    return left.satisfy(statistics) && right.satisfy(statistics);
   }
 
   @Override
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
index 21cce69..7694fab 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
@@ -37,15 +37,15 @@ public class Eq<T extends Comparable<T>> extends UnaryFilter<T> {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
+  public boolean satisfy(StatisticsForFilter statistics) {
     if (filterType == FilterType.TIME_FILTER) {
-      return ((Long) value) >= digest.getMinTime() && ((Long) value) <= digest.getMaxTime();
+      return ((Long) value) >= statistics.getMinTime() && ((Long) value) <= statistics.getMaxTime();
     } else {
-      if (digest.isMinValueNull() || digest.isMaxValueNull()) {
+      if (statistics.isMinValueNull() || statistics.isMaxValueNull()) {
         return true;
       }
-      return value.compareTo(digest.getMinValue()) >= 0
-          && value.compareTo(digest.getMaxValue()) <= 0;
+      return value.compareTo(statistics.getMinValue()) >= 0
+          && value.compareTo(statistics.getMaxValue()) <= 0;
     }
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
index 7e7ff63..e1057b9 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
@@ -37,14 +37,14 @@ public class Gt<T extends Comparable<T>> extends UnaryFilter<T> {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
+  public boolean satisfy(StatisticsForFilter statistics) {
     if (filterType == FilterType.TIME_FILTER) {
-      return ((Long) value) < digest.getMaxTime();
+      return ((Long) value) < statistics.getMaxTime();
     } else {
-      if (digest.isMaxValueNull()) {
+      if (statistics.isMaxValueNull()) {
         return true;
       }
-      return value.compareTo(digest.getMaxValue()) < 0;
+      return value.compareTo(statistics.getMaxValue()) < 0;
     }
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
index 7a63c4f..30feaf6 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
@@ -37,14 +37,14 @@ public class GtEq<T extends Comparable<T>> extends UnaryFilter<T> {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
+  public boolean satisfy(StatisticsForFilter statistics) {
     if (filterType == FilterType.TIME_FILTER) {
-      return ((Long) value) <= digest.getMaxTime();
+      return ((Long) value) <= statistics.getMaxTime();
     } else {
-      if (digest.isMaxValueNull()) {
+      if (statistics.isMaxValueNull()) {
         return true;
       }
-      return value.compareTo(digest.getMaxValue()) <= 0;
+      return value.compareTo(statistics.getMaxValue()) <= 0;
     }
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
index 3954935..a68c0fa 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
@@ -37,14 +37,14 @@ public class Lt<T extends Comparable<T>> extends UnaryFilter<T> {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
+  public boolean satisfy(StatisticsForFilter statistics) {
     if (filterType == FilterType.TIME_FILTER) {
-      return ((Long) value) > digest.getMinTime();
+      return ((Long) value) > statistics.getMinTime();
     } else {
-      if (digest.isMinValueNull()) {
+      if (statistics.isMinValueNull()) {
         return true;
       }
-      return value.compareTo(digest.getMinValue()) > 0;
+      return value.compareTo(statistics.getMinValue()) > 0;
     }
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
index 7ca6b12..f9b4686 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
@@ -37,14 +37,14 @@ public class LtEq<T extends Comparable<T>> extends UnaryFilter<T> {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
+  public boolean satisfy(StatisticsForFilter statistics) {
     if (filterType == FilterType.TIME_FILTER) {
-      return ((Long) value) >= digest.getMinTime();
+      return ((Long) value) >= statistics.getMinTime();
     } else {
-      if (digest.isMinValueNull()) {
+      if (statistics.isMinValueNull()) {
         return true;
       }
-      return value.compareTo(digest.getMinValue()) >= 0;
+      return value.compareTo(statistics.getMinValue()) >= 0;
     }
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
index 1c0e597..66bce41 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
@@ -37,15 +37,15 @@ public class NotEq<T extends Comparable<T>> extends UnaryFilter<T> {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
+  public boolean satisfy(StatisticsForFilter statistics) {
     if (filterType == FilterType.TIME_FILTER) {
-      return !(((Long) value) == digest.getMinTime() && (Long) value == digest.getMaxTime());
+      return !(((Long) value) == statistics.getMinTime() && (Long) value == statistics.getMaxTime());
     } else {
-      if (digest.isMinValueNull() || digest.isMaxValueNull()) {
+      if (statistics.isMinValueNull() || statistics.isMaxValueNull()) {
         return true;
       }
-      return !(value.compareTo(digest.getMinValue()) == 0
-          && value.compareTo(digest.getMaxValue()) == 0);
+      return !(value.compareTo(statistics.getMinValue()) == 0
+          && value.compareTo(statistics.getMaxValue()) == 0);
     }
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotFilter.java
index 4135c45..101c595 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotFilter.java
@@ -19,7 +19,7 @@
 package org.apache.iotdb.tsfile.read.filter.operator;
 
 import java.io.Serializable;
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
 /**
@@ -35,8 +35,8 @@ public class NotFilter implements Filter, Serializable {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
-    return !that.satisfy(digest);
+  public boolean satisfy(StatisticsForFilter statistics) {
+    return !that.satisfy(statistics);
   }
 
   @Override
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
index 0472be8..1e9518a 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
@@ -19,7 +19,7 @@
 package org.apache.iotdb.tsfile.read.filter.operator;
 
 import java.io.Serializable;
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.BinaryFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
@@ -45,8 +45,8 @@ public class OrFilter extends BinaryFilter implements Serializable {
   }
 
   @Override
-  public boolean satisfy(DigestForFilter digest) {
-    return left.satisfy(digest) || right.satisfy(digest);
+  public boolean satisfy(StatisticsForFilter statistics) {
+    return left.satisfy(statistics) || right.satisfy(statistics);
   }
 
   @Override
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReaderWithFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReaderWithFilter.java
index 0381628..d1c282e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReaderWithFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReaderWithFilter.java
@@ -20,7 +20,7 @@ package org.apache.iotdb.tsfile.read.reader.chunk;
 
 import org.apache.iotdb.tsfile.file.header.PageHeader;
 import org.apache.iotdb.tsfile.read.common.Chunk;
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
 public class ChunkReaderWithFilter extends ChunkReader {
@@ -37,12 +37,12 @@ public class ChunkReaderWithFilter extends ChunkReader {
     if (pageHeader.getMaxTimestamp() < deletedAt) {
       return false;
     }
-    DigestForFilter digest = new DigestForFilter(pageHeader.getMinTimestamp(),
+    StatisticsForFilter statistics = new StatisticsForFilter(pageHeader.getMinTimestamp(),
         pageHeader.getMaxTimestamp(),
         pageHeader.getStatistics().getMinBytebuffer(),
         pageHeader.getStatistics().getMaxBytebuffer(),
         chunkHeader.getDataType());
-    return filter.satisfy(digest);
+    return filter.satisfy(statistics);
   }
 
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReaderWithFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReaderWithFilter.java
index ad8968d..147daa1 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReaderWithFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReaderWithFilter.java
@@ -22,10 +22,10 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.List;
 import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
-import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics.StatisticType;
 import org.apache.iotdb.tsfile.read.common.Chunk;
 import org.apache.iotdb.tsfile.read.controller.IChunkLoader;
-import org.apache.iotdb.tsfile.read.filter.DigestForFilter;
+import org.apache.iotdb.tsfile.read.filter.StatisticsForFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.reader.chunk.ChunkReaderWithFilter;
 
@@ -53,15 +53,15 @@ public class FileSeriesReaderWithFilter extends FileSeriesReader {
   protected boolean chunkSatisfied(ChunkMetaData chunkMetaData) {
     ByteBuffer minValue = null;
     ByteBuffer maxValue = null;
-    ByteBuffer[] statistics = chunkMetaData.getDigest().getStatistics();
+    ByteBuffer[] statistics = chunkMetaData.getStatistics().getStatisticBuffers();
     if (statistics != null) {
-      minValue = statistics[Statistics.StatisticType.min_value.ordinal()]; // note still CAN be null
-      maxValue = statistics[Statistics.StatisticType.max_value.ordinal()]; // note still CAN be null
+      minValue = statistics[StatisticType.min_value.ordinal()]; // note still CAN be null
+      maxValue = statistics[StatisticType.max_value.ordinal()]; // note still CAN be null
     }
 
-    DigestForFilter digest = new DigestForFilter(chunkMetaData.getStartTime(),
+    StatisticsForFilter statisticsForFilter = new StatisticsForFilter(chunkMetaData.getStartTime(),
         chunkMetaData.getEndTime(), minValue, maxValue, chunkMetaData.getTsDataType());
-    return filter.satisfy(digest);
+    return filter.satisfy(statisticsForFilter);
   }
 
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/tool/upgrade/TsfileUpgradeToolV0_8_0.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/tool/upgrade/TsfileUpgradeToolV0_8_0.java
index cdb7436..ae22c0e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/tool/upgrade/TsfileUpgradeToolV0_8_0.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/tool/upgrade/TsfileUpgradeToolV0_8_0.java
@@ -417,8 +417,8 @@ public class TsfileUpgradeToolV0_8_0 implements AutoCloseable {
             statisticsArray[Statistics.StatisticType.sum_value.ordinal()] = ByteBuffer
                 .wrap(chunkStatistics.getSumBytes());
             Statistics tsDigest = Statistics.getStatsByType(dataType);
-            tsDigest.setStatistics(statisticsArray);
-            currentChunkMetaData.setDigest(tsDigest);
+            tsDigest.setStatisticBuffers(statisticsArray);
+            currentChunkMetaData.setStatistics(tsDigest);
             chunkMetaDataList.add(currentChunkMetaData);
             numOfPoints = 0;
             pageHeadersList.add(pageHeaders);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
index 401686d..0405d4e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
@@ -571,6 +571,8 @@ public class ReadWriteIOUtils {
   /**
    * read bytes from byteBuffer, this method makes sure that you can read length bytes or reach to
    * the end of the buffer.
+   *
+   * int + buffer -> buffer
    */
   public static ByteBuffer readByteBufferWithSelfDescriptionLength(ByteBuffer buffer) {
     int byteLength = readInt(buffer);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
index 44636c5..0a78cda 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
@@ -217,9 +217,9 @@ public class TsFileIOWriter {
 
     Statistics tsDigest = Statistics.getStatsByType(tsDataType);
 
-    tsDigest.setStatistics(statisticsArray);
+    tsDigest.setStatisticBuffers(statisticsArray);
 
-    currentChunkMetaData.setDigest(tsDigest);
+    currentChunkMetaData.setStatistics(tsDigest);
 
     return header.getSerializedSize();
   }
@@ -232,7 +232,7 @@ public class TsFileIOWriter {
     currentChunkMetaData = new ChunkMetaData(chunkHeader.getMeasurementID(),
         chunkHeader.getDataType(), out.getPosition(), chunkMetadata.getStartTime(),
         chunkMetadata.getEndTime());
-    currentChunkMetaData.setDigest(chunkMetadata.getDigest());
+    currentChunkMetaData.setStatistics(chunkMetadata.getStatistics());
     chunkHeader.serializeTo(out.wrapAsStream());
     out.write(chunk.getData());
     endChunk(chunkMetadata.getNumOfPoints());
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaDataTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaDataTest.java
index afa93fb..8b4e0b9 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaDataTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaDataTest.java
@@ -104,56 +104,4 @@ public class ChunkGroupMetaDataTest {
     reader.close();
   }
 
-  @Test
-  public void testWriteIntoFile() {
-    // serialize metadata to a file
-    ChunkGroupMetaData metaData = TestHelper.createSimpleChunkGroupMetaData();
-    serialized(metaData);
-    ChunkGroupMetaData readMetaData = deSerialized();
-    serialized(readMetaData);
-  }
-
-  private ChunkGroupMetaData deSerialized() {
-    FileInputStream fis = null;
-    ChunkGroupMetaData metaData = null;
-    try {
-      fis = new FileInputStream(new File(PATH));
-      metaData = ChunkGroupMetaData.deserializeFrom(fis);
-      return metaData;
-    } catch (IOException e) {
-      e.printStackTrace();
-    } finally {
-      if (fis != null) {
-        try {
-          fis.close();
-        } catch (IOException e) {
-          e.printStackTrace();
-        }
-      }
-    }
-    return metaData;
-  }
-
-  private void serialized(ChunkGroupMetaData metaData) {
-    File file = new File(PATH);
-    if (file.exists()) {
-      file.delete();
-    }
-    FileOutputStream fos = null;
-    try {
-      fos = new FileOutputStream(file);
-      metaData.serializeTo(fos);
-    } catch (IOException e) {
-      e.printStackTrace();
-    } finally {
-      if (fos != null) {
-        try {
-          fos.close();
-        } catch (IOException e) {
-          e.printStackTrace();
-        }
-      }
-    }
-  }
-
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetaDataTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetaDataTest.java
deleted file mode 100644
index a9c6140..0000000
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetaDataTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.tsfile.file.metadata;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.utils.TestHelper;
-import org.apache.iotdb.tsfile.file.metadata.utils.Utils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class ChunkMetaDataTest {
-
-  public static final String MEASUREMENT_UID = "sensor231";
-  public static final long FILE_OFFSET = 2313424242L;
-  public static final long NUM_OF_POINTS = 123456L;
-  public static final long START_TIME = 523372036854775806L;
-  public static final long END_TIME = 523372036854775806L;
-  public static final TSDataType DATA_TYPE = TSDataType.INT64;
-  final String PATH = "target/outputTimeSeriesChunk.tsfile";
-
-  @Before
-  public void setUp() {
-  }
-
-  @After
-  public void tearDown() {
-    File file = new File(PATH);
-    if (file.exists()) {
-      file.delete();
-    }
-  }
-
-  @Test
-  public void testWriteIntoFile() {
-    ChunkMetaData metaData = TestHelper.createSimpleTimeSeriesChunkMetaData();
-    serialized(metaData);
-    ChunkMetaData readMetaData = deSerialized();
-    Utils.isTimeSeriesChunkMetadataEqual(metaData, readMetaData);
-    serialized(readMetaData);
-  }
-
-  @Test
-  public void testWriteIntoFile2() throws IOException {
-    ChunkMetaData metaData = TestHelper.createNotCompleteSimpleTimeSeriesChunkMetaData();
-    serialized(metaData);
-    ChunkMetaData readMetaData = deSerialized();
-    Utils.isTimeSeriesChunkMetadataEqual(metaData, readMetaData);
-    serialized(readMetaData);
-  }
-
-  private ChunkMetaData deSerialized() {
-    FileInputStream fis = null;
-    ChunkMetaData metaData = null;
-    try {
-      fis = new FileInputStream(new File(PATH));
-      metaData = ChunkMetaData.deserializeFrom(fis);
-      return metaData;
-    } catch (IOException e) {
-      e.printStackTrace();
-    } finally {
-      if (fis != null) {
-        try {
-          fis.close();
-        } catch (IOException e) {
-          e.printStackTrace();
-        }
-      }
-    }
-    return metaData;
-  }
-
-  private void serialized(ChunkMetaData metaData) {
-    File file = new File(PATH);
-    if (file.exists()) {
-      file.delete();
-    }
-    FileOutputStream fos = null;
-    try {
-      fos = new FileOutputStream(file);
-      metaData.serializeTo(fos);
-    } catch (IOException e) {
-      e.printStackTrace();
-    } finally {
-      if (fos != null) {
-        try {
-          fos.close();
-        } catch (IOException e) {
-          e.printStackTrace();
-        }
-      }
-    }
-  }
-}
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TsDeviceMetadataTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TsDeviceMetadataTest.java
deleted file mode 100644
index 19539e2..0000000
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TsDeviceMetadataTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.tsfile.file.metadata;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import org.apache.iotdb.tsfile.file.metadata.utils.TestHelper;
-import org.apache.iotdb.tsfile.file.metadata.utils.Utils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TsDeviceMetadataTest {
-
-  public static final long START_TIME = 523372036854775806L;
-  public static final long END_TIME = 523372036854775806L;
-  final String PATH = "target/outputDevice.tsfile";
-
-  @Before
-  public void setUp() {
-  }
-
-  @After
-  public void tearDown() {
-    File file = new File(PATH);
-    if (file.exists()) {
-      file.delete();
-    }
-  }
-
-  @Test
-  public void testWriteIntoFile() throws IOException {
-    TsDeviceMetadata metaData = TestHelper.createSimpleDeviceMetaData();
-    File file = new File(PATH);
-    if (file.exists()) {
-      file.delete();
-    }
-    FileOutputStream fos = new FileOutputStream(file);
-    metaData.serializeTo(fos);
-    fos.close();
-
-    FileInputStream fis = new FileInputStream(new File(PATH));
-    Utils.isTsDeviceMetadataEqual(metaData, TsDeviceMetadata.deserializeFrom(fis));
-    fis.close();
-  }
-}
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
index afba538..20218ba 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
@@ -18,38 +18,21 @@
  */
 package org.apache.iotdb.tsfile.file.metadata.utils;
 
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
 import org.apache.iotdb.tsfile.file.header.PageHeaderTest;
-import org.apache.iotdb.tsfile.file.metadata.ChunkGroupMetaData;
-import org.apache.iotdb.tsfile.file.metadata.ChunkGroupMetaDataTest;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetaDataTest;
 import org.apache.iotdb.tsfile.file.metadata.TimeSeriesMetadataTest;
-import org.apache.iotdb.tsfile.file.metadata.TsDeviceMetadata;
 import org.apache.iotdb.tsfile.file.metadata.TsDeviceMetadataIndex;
-import org.apache.iotdb.tsfile.file.metadata.TsDeviceMetadataTest;
 import org.apache.iotdb.tsfile.file.metadata.TsFileMetaData;
 import org.apache.iotdb.tsfile.file.metadata.TsFileMetaDataTest;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
-import org.apache.iotdb.tsfile.utils.BytesUtils;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 public class TestHelper {
 
-  private static final String MAX_VALUE = "321";
-  private static final String MIN_VALUE = "123";
-  private static final String SUM_VALUE = "321123";
-  private static final String FIRST_VALUE = "1";
-  private static final String LAST_VALUE = "222";
-
   public static TsFileMetaData createSimpleFileMetaData() {
     TsFileMetaData metaData = new TsFileMetaData(generateDeviceIndexMetadataMap(), new HashMap<>());
     metaData.addMeasurementSchema(TestHelper.createSimpleMeasurementSchema());
@@ -58,7 +41,7 @@ public class TestHelper {
     return metaData;
   }
 
-  public static Map<String, TsDeviceMetadataIndex> generateDeviceIndexMetadataMap() {
+  private static Map<String, TsDeviceMetadataIndex> generateDeviceIndexMetadataMap() {
     Map<String, TsDeviceMetadataIndex> indexMap = new HashMap<>();
     for (int i = 0; i < 5; i++) {
       indexMap.put("device_" + i, createSimpleDeviceIndexMetadata());
@@ -66,15 +49,7 @@ public class TestHelper {
     return indexMap;
   }
 
-  public static Map<String, TsDeviceMetadata> generateDeviceMetadataMap() {
-    Map<String, TsDeviceMetadata> deviceMetadataMap = new HashMap<>();
-    for (int i = 0; i < 5; i++) {
-      deviceMetadataMap.put("device_" + i, createSimpleDeviceMetaData());
-    }
-    return deviceMetadataMap;
-  }
-
-  public static TsDeviceMetadataIndex createSimpleDeviceIndexMetadata() {
+  private static TsDeviceMetadataIndex createSimpleDeviceIndexMetadata() {
     TsDeviceMetadataIndex index = new TsDeviceMetadataIndex();
     index.setOffset(0);
     index.setLen(10);
@@ -83,90 +58,12 @@ public class TestHelper {
     return index;
   }
 
-  public static TsDeviceMetadata createSimpleDeviceMetaData() {
-    TsDeviceMetadata metaData = new TsDeviceMetadata();
-    metaData.setStartTime(TsDeviceMetadataTest.START_TIME);
-    metaData.setEndTime(TsDeviceMetadataTest.END_TIME);
-    metaData.addChunkGroupMetaData(TestHelper.createSimpleChunkGroupMetaData());
-    metaData.addChunkGroupMetaData(TestHelper.createSimpleChunkGroupMetaData());
-    return metaData;
-  }
-
-  public static ChunkGroupMetaData createEmptySeriesChunkGroupMetaData() {
-    return new ChunkGroupMetaData("d1", new ArrayList<>(), 0);
-  }
-
-  public static ChunkGroupMetaData createSimpleChunkGroupMetaData() {
-    ChunkGroupMetaData metaData = new ChunkGroupMetaData(ChunkGroupMetaDataTest.DELTA_OBJECT_UID,
-        new ArrayList<>(), 0);
-    metaData.addTimeSeriesChunkMetaData(TestHelper.createSimpleTimeSeriesChunkMetaData());
-    metaData.addTimeSeriesChunkMetaData(TestHelper.createSimpleTimeSeriesChunkMetaData());
-    return metaData;
-  }
-
-  public static ChunkMetaData createSimpleTimeSeriesChunkMetaData() {
-    ChunkMetaData metaData = new ChunkMetaData(ChunkMetaDataTest.MEASUREMENT_UID,
-        ChunkMetaDataTest.DATA_TYPE,
-        ChunkMetaDataTest.FILE_OFFSET, ChunkMetaDataTest.START_TIME, ChunkMetaDataTest.END_TIME// ,
-        // ChunkMetaDataTest.ENCODING_TYPE
-    );
-    metaData.setNumOfPoints(ChunkMetaDataTest.NUM_OF_POINTS);
-    metaData.setDigest(Statistics.getStatsByType(ChunkMetaDataTest.DATA_TYPE));
-    return metaData;
-  }
-
-  public static ChunkMetaData createNotCompleteSimpleTimeSeriesChunkMetaData() throws IOException {
-    ChunkMetaData metaData = new ChunkMetaData(ChunkMetaDataTest.MEASUREMENT_UID,
-        ChunkMetaDataTest.DATA_TYPE,
-        ChunkMetaDataTest.FILE_OFFSET, ChunkMetaDataTest.START_TIME, ChunkMetaDataTest.END_TIME
-    );
-    metaData.setNumOfPoints(ChunkMetaDataTest.NUM_OF_POINTS);
-    metaData.setDigest(createNotCompleteSimpleTsDigest(ChunkMetaDataTest.DATA_TYPE));
-    return metaData;
-  }
-
   public static MeasurementSchema createSimpleMeasurementSchema() {
     return new MeasurementSchema(TimeSeriesMetadataTest.measurementUID,
         TSDataType.INT64,
         TSEncoding.RLE);
   }
 
-  public static Statistics createSimpleTsDigest(TSDataType dataType) throws IOException {
-    Statistics digest = Statistics.getStatsByType(dataType);
-    ByteBuffer[] statisticsArray = new ByteBuffer[Statistics.StatisticType.getTotalTypeNum()];
-    statisticsArray[Statistics.StatisticType.min_value.ordinal()] = ByteBuffer
-        .wrap(BytesUtils.stringToBytes(MIN_VALUE));
-    statisticsArray[Statistics.StatisticType.max_value.ordinal()] = ByteBuffer
-        .wrap(BytesUtils.stringToBytes(MAX_VALUE));
-    statisticsArray[Statistics.StatisticType.first_value.ordinal()] = ByteBuffer
-        .wrap(BytesUtils.stringToBytes(FIRST_VALUE));
-    statisticsArray[Statistics.StatisticType.last_value.ordinal()] = ByteBuffer
-        .wrap(BytesUtils.stringToBytes(LAST_VALUE));
-    statisticsArray[Statistics.StatisticType.sum_value.ordinal()] = ByteBuffer
-        .wrap(BytesUtils.stringToBytes(SUM_VALUE));
-    digest.setStatistics(statisticsArray);
-    return digest;
-  }
-
-  public static Statistics createNotCompleteSimpleTsDigest(TSDataType dataType) throws IOException {
-    Statistics digest = Statistics.getStatsByType(dataType);
-    ByteBuffer[] statisticsArray = new ByteBuffer[Statistics.StatisticType.getTotalTypeNum()];
-    statisticsArray[Statistics.StatisticType.first_value.ordinal()] = ByteBuffer
-        .wrap(BytesUtils.stringToBytes(FIRST_VALUE));
-    statisticsArray[Statistics.StatisticType.last_value.ordinal()] = ByteBuffer
-        .wrap(BytesUtils.stringToBytes(LAST_VALUE));
-    statisticsArray[Statistics.StatisticType.sum_value.ordinal()] = ByteBuffer
-        .wrap(BytesUtils.stringToBytes(SUM_VALUE));
-    digest.setStatistics(statisticsArray);
-    return digest;
-  }
-
-  public static List<String> getJSONArray() {
-    List<String> jsonMetaData = new ArrayList<String>();
-    jsonMetaData.add("fsdfsfsd");
-    jsonMetaData.add("424fd");
-    return jsonMetaData;
-  }
 
   public static PageHeader createSimplePageHeader() {
     Statistics<?> statistics = Statistics.getStatsByType(PageHeaderTest.DATA_TYPE);
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
index e59d541..52afc3c 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
@@ -71,13 +71,13 @@ public class Utils {
     }
   }
 
-  public static void isTwoTsDigestEqual(Statistics digestA, Statistics digestB, String name) {
-    if ((digestA == null) ^ (digestB == null)) {
+  public static void isTwoTsDigestEqual(Statistics statisticsA, Statistics statisticsB, String name) {
+    if ((statisticsA == null) ^ (statisticsB == null)) {
       System.out.println("error");
       fail(String.format("one of %s is null", name));
     }
-    if (digestA != null) {
-      Assert.assertEquals(digestA, digestB);
+    if (statisticsA != null) {
+      Assert.assertEquals(statisticsA, statisticsB);
     }
   }
 
@@ -118,9 +118,9 @@ public class Utils {
       assertTrue(metadata1.getNumOfPoints() == metadata2.getNumOfPoints());
       assertTrue(metadata1.getStartTime() == metadata2.getStartTime());
       assertTrue(metadata1.getEndTime() == metadata2.getEndTime());
-      assertNotNull(metadata1.getDigest());
-      assertNotNull(metadata2.getDigest());
-      Utils.isTwoTsDigestEqual(metadata1.getDigest(), metadata2.getDigest(), "TsDigest");
+      assertNotNull(metadata1.getStatistics());
+      assertNotNull(metadata2.getStatistics());
+      Utils.isTwoTsDigestEqual(metadata1.getStatistics(), metadata2.getStatistics(), "TsDigest");
     }
   }
 
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/DigestFilterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/DigestFilterTest.java
index 68b0f0e..5fb05ff 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/DigestFilterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/DigestFilterTest.java
@@ -28,89 +28,89 @@ import org.junit.Test;
 
 public class DigestFilterTest {
 
-  private DigestForFilter digest1 = new DigestForFilter(1L, 100L, BytesUtils.intToBytes(1),
+  private StatisticsForFilter statistics1 = new StatisticsForFilter(1L, 100L, BytesUtils.intToBytes(1),
       BytesUtils.intToBytes(100), TSDataType.INT32);
-  private DigestForFilter digest2 = new DigestForFilter(101L, 200L, BytesUtils.intToBytes(101),
+  private StatisticsForFilter statistics2 = new StatisticsForFilter(101L, 200L, BytesUtils.intToBytes(101),
       BytesUtils.intToBytes(200), TSDataType.INT32);
-  private DigestForFilter digest3 = new DigestForFilter(101L, 200L, (ByteBuffer) null, null,
+  private StatisticsForFilter statistics3 = new StatisticsForFilter(101L, 200L, (ByteBuffer) null, null,
       TSDataType.INT32);
 
   @Test
   public void testEq() {
     Filter timeEq = TimeFilter.eq(10L);
-    Assert.assertTrue(timeEq.satisfy(digest1));
-    Assert.assertFalse(timeEq.satisfy(digest2));
-    Assert.assertFalse(timeEq.satisfy(digest3));
+    Assert.assertTrue(timeEq.satisfy(statistics1));
+    Assert.assertFalse(timeEq.satisfy(statistics2));
+    Assert.assertFalse(timeEq.satisfy(statistics3));
 
     Filter valueEq = ValueFilter.eq(100);
-    Assert.assertTrue(valueEq.satisfy(digest1));
-    Assert.assertFalse(valueEq.satisfy(digest2));
-    Assert.assertTrue(valueEq.satisfy(digest3));
+    Assert.assertTrue(valueEq.satisfy(statistics1));
+    Assert.assertFalse(valueEq.satisfy(statistics2));
+    Assert.assertTrue(valueEq.satisfy(statistics3));
   }
 
   @Test
   public void testGt() {
     Filter timeGt = TimeFilter.gt(100L);
-    Assert.assertFalse(timeGt.satisfy(digest1));
-    Assert.assertTrue(timeGt.satisfy(digest2));
-    Assert.assertTrue(timeGt.satisfy(digest3));
+    Assert.assertFalse(timeGt.satisfy(statistics1));
+    Assert.assertTrue(timeGt.satisfy(statistics2));
+    Assert.assertTrue(timeGt.satisfy(statistics3));
 
     Filter valueGt = ValueFilter.gt(100);
-    Assert.assertFalse(valueGt.satisfy(digest1));
-    Assert.assertTrue(valueGt.satisfy(digest2));
-    Assert.assertTrue(valueGt.satisfy(digest3));
+    Assert.assertFalse(valueGt.satisfy(statistics1));
+    Assert.assertTrue(valueGt.satisfy(statistics2));
+    Assert.assertTrue(valueGt.satisfy(statistics3));
   }
 
   @Test
   public void testGtEq() {
     Filter timeGtEq = TimeFilter.gtEq(100L);
-    Assert.assertTrue(timeGtEq.satisfy(digest1));
-    Assert.assertTrue(timeGtEq.satisfy(digest2));
-    Assert.assertTrue(timeGtEq.satisfy(digest3));
+    Assert.assertTrue(timeGtEq.satisfy(statistics1));
+    Assert.assertTrue(timeGtEq.satisfy(statistics2));
+    Assert.assertTrue(timeGtEq.satisfy(statistics3));
 
     Filter valueGtEq = ValueFilter.gtEq(100);
-    Assert.assertTrue(valueGtEq.satisfy(digest1));
-    Assert.assertTrue(valueGtEq.satisfy(digest3));
-    Assert.assertTrue(valueGtEq.satisfy(digest3));
+    Assert.assertTrue(valueGtEq.satisfy(statistics1));
+    Assert.assertTrue(valueGtEq.satisfy(statistics3));
+    Assert.assertTrue(valueGtEq.satisfy(statistics3));
   }
 
   @Test
   public void testLt() {
     Filter timeLt = TimeFilter.lt(101L);
-    Assert.assertTrue(timeLt.satisfy(digest1));
-    Assert.assertFalse(timeLt.satisfy(digest2));
-    Assert.assertFalse(timeLt.satisfy(digest3));
+    Assert.assertTrue(timeLt.satisfy(statistics1));
+    Assert.assertFalse(timeLt.satisfy(statistics2));
+    Assert.assertFalse(timeLt.satisfy(statistics3));
 
     Filter valueLt = ValueFilter.lt(101);
-    Assert.assertTrue(valueLt.satisfy(digest1));
-    Assert.assertFalse(valueLt.satisfy(digest2));
-    Assert.assertTrue(valueLt.satisfy(digest3));
+    Assert.assertTrue(valueLt.satisfy(statistics1));
+    Assert.assertFalse(valueLt.satisfy(statistics2));
+    Assert.assertTrue(valueLt.satisfy(statistics3));
   }
 
   @Test
   public void testLtEq() {
     Filter timeLtEq = TimeFilter.ltEq(101L);
-    Assert.assertTrue(timeLtEq.satisfy(digest1));
-    Assert.assertTrue(timeLtEq.satisfy(digest2));
-    Assert.assertTrue(timeLtEq.satisfy(digest3));
+    Assert.assertTrue(timeLtEq.satisfy(statistics1));
+    Assert.assertTrue(timeLtEq.satisfy(statistics2));
+    Assert.assertTrue(timeLtEq.satisfy(statistics3));
 
     Filter valueLtEq = ValueFilter.ltEq(101);
-    Assert.assertTrue(valueLtEq.satisfy(digest1));
-    Assert.assertTrue(valueLtEq.satisfy(digest2));
-    Assert.assertTrue(valueLtEq.satisfy(digest3));
+    Assert.assertTrue(valueLtEq.satisfy(statistics1));
+    Assert.assertTrue(valueLtEq.satisfy(statistics2));
+    Assert.assertTrue(valueLtEq.satisfy(statistics3));
   }
 
   @Test
   public void testAndOr() {
     Filter andFilter = FilterFactory.and(TimeFilter.gt(10L), ValueFilter.lt(50));
-    Assert.assertTrue(andFilter.satisfy(digest1));
-    Assert.assertFalse(andFilter.satisfy(digest2));
-    Assert.assertTrue(andFilter.satisfy(digest3));
+    Assert.assertTrue(andFilter.satisfy(statistics1));
+    Assert.assertFalse(andFilter.satisfy(statistics2));
+    Assert.assertTrue(andFilter.satisfy(statistics3));
 
     Filter orFilter = FilterFactory.or(andFilter, TimeFilter.eq(200L));
-    Assert.assertTrue(orFilter.satisfy(digest1));
-    Assert.assertTrue(orFilter.satisfy(digest2));
-    Assert.assertTrue(orFilter.satisfy(digest3));
+    Assert.assertTrue(orFilter.satisfy(statistics1));
+    Assert.assertTrue(orFilter.satisfy(statistics2));
+    Assert.assertTrue(orFilter.satisfy(statistics3));
   }
 
 }