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:02 UTC

[incubator-iotdb] 01/01: remove digest

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));
   }
 
 }