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

jiangtian pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git


The following commit(s) were added to refs/heads/develop by this push:
     new 4330d7cc perf: Use enum types for compression and encoding instead of 
strings (#640)
4330d7cc is described below

commit 4330d7cc60f345931cd370ef7d733073d77f8e62
Author: Zhenyu Luo <[email protected]>
AuthorDate: Tue Nov 18 18:36:08 2025 +0800

    perf: Use enum types for compression and encoding instead of strings (#640)
    
    * Optimize compression and encoding types to use enums instead of strings
    
    - Change compression type fields from String to CompressionType enum
    - Change encoding type fields from String to TSEncoding enum
    - Optimize getCompressor() method to use direct field access instead of 
string conversion
    - Optimize getValueEncoder() to return TSEncoding directly instead of String
    - Update all callers to remove unnecessary TSEncoding.valueOf() conversions
    - Improve performance by avoiding string conversions in hot paths
    
    * spotless
---
 .../apache/tsfile/common/conf/TSFileConfig.java    | 108 ++++++++++++---------
 .../java/org/apache/tsfile/read/common/Chunk.java  |   6 +-
 .../tsfile/write/schema/MeasurementSchema.java     |   2 +-
 .../write/schema/MeasurementSchemaBuilder.java     |   3 +-
 .../tsfile/write/schema/TimeseriesSchema.java      |   2 +-
 .../write/schema/VectorMeasurementSchema.java      |   3 +-
 6 files changed, 68 insertions(+), 56 deletions(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java 
b/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
index 201e6f9e..24ab1428 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
@@ -22,6 +22,7 @@ package org.apache.tsfile.common.conf;
 import org.apache.tsfile.encrypt.EncryptUtils;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
+import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.fileSystem.FSType;
 import org.apache.tsfile.utils.FSUtils;
 
@@ -106,43 +107,43 @@ public class TSFileConfig implements Serializable {
    * Encoder of time column, TsFile supports TS_2DIFF, PLAIN and 
RLE(run-length encoding) Default
    * value is TS_2DIFF.
    */
-  private String timeEncoding = "TS_2DIFF";
+  private TSEncoding timeEncoding = TSEncoding.TS_2DIFF;
 
   /** Encoder of boolean column. Default value is RLE. */
-  private String booleanEncoding = "RLE";
+  private TSEncoding booleanEncoding = TSEncoding.RLE;
 
   /** Encoder of int32 and date column. Default value is TS_2DIFF. */
-  private String int32Encoding = "TS_2DIFF";
+  private TSEncoding int32Encoding = TSEncoding.TS_2DIFF;
 
   /** Encoder of int64 and timestamp column. Default value is TS_2DIFF. */
-  private String int64Encoding = "TS_2DIFF";
+  private TSEncoding int64Encoding = TSEncoding.TS_2DIFF;
 
   /** Encoder of float column. Default value is GORILLA. */
-  private String floatEncoding = "GORILLA";
+  private TSEncoding floatEncoding = TSEncoding.GORILLA;
 
   /** Encoder of double column. Default value is GORILLA. */
-  private String doubleEncoding = "GORILLA";
+  private TSEncoding doubleEncoding = TSEncoding.GORILLA;
 
   /** Encoder of string, blob and text column. Default value is PLAIN. */
-  private String textEncoding = "PLAIN";
+  private TSEncoding textEncoding = TSEncoding.PLAIN;
 
   /** Compression of boolean column. Defaults to the overall compression. */
-  private String booleanCompression = null;
+  private CompressionType booleanCompression = null;
 
   /** Compression of int32 and date column. Defaults to the overall 
compression. */
-  private String int32Compression = null;
+  private CompressionType int32Compression = null;
 
   /** Compression of int64 and timestamp column. Defaults to the overall 
compression. */
-  private String int64Compression = null;
+  private CompressionType int64Compression = null;
 
   /** Compression of float column. Defaults to the overall compression. */
-  private String floatCompression = null;
+  private CompressionType floatCompression = null;
 
   /** Compression of double column. Defaults to the overall compression. */
-  private String doubleCompression = null;
+  private CompressionType doubleCompression = null;
 
   /** Compression of string, blob and text column. Defaults to the overall 
compression. */
-  private String textCompression = null;
+  private CompressionType textCompression = null;
 
   /**
    * Encoder of value series. default value is PLAIN. For int, long data type, 
TsFile also supports
@@ -352,13 +353,13 @@ public class TSFileConfig implements Serializable {
   }
 
   public String getTimeEncoder() {
-    return timeEncoding;
+    return timeEncoding.name();
   }
 
   // Compression configuration
 
   public void setTimeEncoder(String timeEncoder) {
-    this.timeEncoding = timeEncoder;
+    this.timeEncoding = TSEncoding.valueOf(timeEncoder);
   }
 
   // Don't change the following configuration
@@ -368,7 +369,7 @@ public class TSFileConfig implements Serializable {
     return valueEncoder;
   }
 
-  public String getValueEncoder(TSDataType dataType) {
+  public TSEncoding getValueEncoder(TSDataType dataType) {
     switch (dataType) {
       case BOOLEAN:
         return booleanEncoding;
@@ -392,39 +393,36 @@ public class TSFileConfig implements Serializable {
   }
 
   public CompressionType getCompressor(TSDataType dataType) {
-    String compressionName;
+    CompressionType compressionType;
     switch (dataType) {
       case BOOLEAN:
-        compressionName = booleanCompression;
+        compressionType = booleanCompression;
         break;
       case INT32:
       case DATE:
-        compressionName = int32Compression;
+        compressionType = int32Compression;
         break;
       case INT64:
       case TIMESTAMP:
-        compressionName = int64Compression;
+        compressionType = int64Compression;
         break;
       case FLOAT:
-        compressionName = floatCompression;
+        compressionType = floatCompression;
         break;
       case DOUBLE:
-        compressionName = doubleCompression;
+        compressionType = doubleCompression;
         break;
       case STRING:
       case BLOB:
       case TEXT:
       case OBJECT:
-        compressionName = textCompression;
+        compressionType = textCompression;
         break;
       default:
-        compressionName = null;
+        compressionType = null;
     }
 
-    CompressionType compressionType;
-    if (compressionName != null) {
-      compressionType = CompressionType.valueOf(compressionName);
-    } else {
+    if (compressionType == null) {
       compressionType = compressor;
     }
     return compressionType;
@@ -435,51 +433,51 @@ public class TSFileConfig implements Serializable {
   }
 
   public String getBooleanEncoding() {
-    return booleanEncoding;
+    return booleanEncoding.name();
   }
 
   public void setBooleanEncoding(String booleanEncoding) {
-    this.booleanEncoding = booleanEncoding;
+    this.booleanEncoding = TSEncoding.valueOf(booleanEncoding);
   }
 
   public String getInt32Encoding() {
-    return int32Encoding;
+    return int32Encoding.name();
   }
 
   public void setInt32Encoding(String int32Encoding) {
-    this.int32Encoding = int32Encoding;
+    this.int32Encoding = TSEncoding.valueOf(int32Encoding);
   }
 
   public String getInt64Encoding() {
-    return int64Encoding;
+    return int64Encoding.name();
   }
 
   public void setInt64Encoding(String int64Encoding) {
-    this.int64Encoding = int64Encoding;
+    this.int64Encoding = TSEncoding.valueOf(int64Encoding);
   }
 
   public String getFloatEncoding() {
-    return floatEncoding;
+    return floatEncoding.name();
   }
 
   public void setFloatEncoding(String floatEncoding) {
-    this.floatEncoding = floatEncoding;
+    this.floatEncoding = TSEncoding.valueOf(floatEncoding);
   }
 
   public String getDoubleEncoding() {
-    return doubleEncoding;
+    return doubleEncoding.name();
   }
 
   public void setDoubleEncoding(String doubleEncoding) {
-    this.doubleEncoding = doubleEncoding;
+    this.doubleEncoding = TSEncoding.valueOf(doubleEncoding);
   }
 
   public String getTextEncoding() {
-    return textEncoding;
+    return textEncoding.name();
   }
 
   public void setTextEncoding(String textEncoding) {
-    this.textEncoding = textEncoding;
+    this.textEncoding = TSEncoding.valueOf(textEncoding);
   }
 
   public int getRleBitWidth() {
@@ -760,26 +758,44 @@ public class TSFileConfig implements Serializable {
   }
 
   public void setBooleanCompression(String booleanCompression) {
-    this.booleanCompression = booleanCompression;
+    this.booleanCompression =
+        booleanCompression == null || booleanCompression.isEmpty()
+            ? null
+            : CompressionType.valueOf(booleanCompression);
   }
 
   public void setInt32Compression(String int32Compression) {
-    this.int32Compression = int32Compression;
+    this.int32Compression =
+        int32Compression == null || int32Compression.isEmpty()
+            ? null
+            : CompressionType.valueOf(int32Compression);
   }
 
   public void setInt64Compression(String int64Compression) {
-    this.int64Compression = int64Compression;
+    this.int64Compression =
+        int64Compression == null || int64Compression.isEmpty()
+            ? null
+            : CompressionType.valueOf(int64Compression);
   }
 
   public void setFloatCompression(String floatCompression) {
-    this.floatCompression = floatCompression;
+    this.floatCompression =
+        floatCompression == null || floatCompression.isEmpty()
+            ? null
+            : CompressionType.valueOf(floatCompression);
   }
 
   public void setDoubleCompression(String doubleCompression) {
-    this.doubleCompression = doubleCompression;
+    this.doubleCompression =
+        doubleCompression == null || doubleCompression.isEmpty()
+            ? null
+            : CompressionType.valueOf(doubleCompression);
   }
 
   public void setTextCompression(String textCompression) {
-    this.textCompression = textCompression;
+    this.textCompression =
+        textCompression == null || textCompression.isEmpty()
+            ? null
+            : CompressionType.valueOf(textCompression);
   }
 }
diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/Chunk.java 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/Chunk.java
index c560050d..5d8eaf13 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/Chunk.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/Chunk.java
@@ -219,8 +219,7 @@ public class Chunk {
     if (newType == null || newType == chunkHeader.getDataType()) {
       return this;
     }
-    TSEncoding encoding =
-        
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(newType));
+    TSEncoding encoding = 
TSFileDescriptor.getInstance().getConfig().getValueEncoder(newType);
     IMeasurementSchema schema =
         new MeasurementSchema(
             chunkHeader.getMeasurementID(), newType, encoding, 
chunkHeader.getCompressionType());
@@ -319,8 +318,7 @@ public class Chunk {
     if (newType == null || newType == chunkHeader.getDataType()) {
       return this;
     }
-    TSEncoding encoding =
-        
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(newType));
+    TSEncoding encoding = 
TSFileDescriptor.getInstance().getConfig().getValueEncoder(newType);
     IMeasurementSchema schema =
         new MeasurementSchema(
             chunkHeader.getMeasurementID(), newType, encoding, 
chunkHeader.getCompressionType());
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchema.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchema.java
index 59b1d01a..45edccab 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchema.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchema.java
@@ -66,7 +66,7 @@ public class MeasurementSchema
     this(
         measurementName,
         dataType,
-        
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(dataType)),
+        TSFileDescriptor.getInstance().getConfig().getValueEncoder(dataType),
         TSFileDescriptor.getInstance().getConfig().getCompressor(dataType),
         null);
   }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchemaBuilder.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchemaBuilder.java
index b523a339..3e259c8c 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchemaBuilder.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/MeasurementSchemaBuilder.java
@@ -67,8 +67,7 @@ public class MeasurementSchemaBuilder {
     this.measurementName = measurementName;
     this.dataType = dataType;
     // Set default values from TSFile configuration
-    this.encoding =
-        
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(dataType));
+    this.encoding = 
TSFileDescriptor.getInstance().getConfig().getValueEncoder(dataType);
     this.compressionType = 
TSFileDescriptor.getInstance().getConfig().getCompressor(dataType);
   }
 
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/TimeseriesSchema.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/TimeseriesSchema.java
index 21c74265..47980cf2 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/TimeseriesSchema.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/TimeseriesSchema.java
@@ -55,7 +55,7 @@ public class TimeseriesSchema implements 
Comparable<TimeseriesSchema>, Serializa
     this(
         fullPath,
         tsDataType,
-        
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(tsDataType)),
+        TSFileDescriptor.getInstance().getConfig().getValueEncoder(tsDataType),
         TSFileDescriptor.getInstance().getConfig().getCompressor(tsDataType),
         Collections.emptyMap());
   }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/VectorMeasurementSchema.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/VectorMeasurementSchema.java
index 777eaf87..7495f208 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/schema/VectorMeasurementSchema.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/schema/VectorMeasurementSchema.java
@@ -130,8 +130,7 @@ public class VectorMeasurementSchema
     this.encodings = new byte[types.length];
     for (int i = 0; i < types.length; i++) {
       this.encodings[i] =
-          
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(types[i]))
-              .serialize();
+          
TSFileDescriptor.getInstance().getConfig().getValueEncoder(types[i]).serialize();
     }
     this.encodingConverters = new TSEncodingBuilder[subMeasurements.length];
     this.unifiedCompressor = NO_UNIFIED_COMPRESSOR;

Reply via email to