diff --git a/client/session.go b/client/session.go
index e8ca728..8307c1f 100644
--- a/client/session.go
+++ b/client/session.go
@@ -930,7 +930,7 @@
 		valuesList[index] = values
 		timestampsList[index] = tablet.GetTimestampBytes()
 		typesList[index] = tablet.getDataTypes()
-		sizeList[index] = int32(tablet.rowCount)
+		sizeList[index] = int32(tablet.maxRowNumber)
 	}
 	request := rpc.TSInsertTabletsReq{
 		SessionId:        s.sessionId,
@@ -1146,7 +1146,7 @@
 			Values:       values,
 			Timestamps:   tablet.GetTimestampBytes(),
 			Types:        tablet.getDataTypes(),
-			Size:         int32(tablet.rowCount),
+			Size:         int32(tablet.RowSize),
 			IsAligned:    &isAligned,
 		}
 		return request, nil
diff --git a/client/tablet.go b/client/tablet.go
index 4a89835..3b62938 100644
--- a/client/tablet.go
+++ b/client/tablet.go
@@ -31,9 +31,6 @@
 type MeasurementSchema struct {
 	Measurement string
 	DataType    TSDataType
-	Encoding    TSEncoding
-	Compressor  TSCompressionType
-	Properties  map[string]string
 }
 
 type Tablet struct {
@@ -41,11 +38,12 @@
 	measurementSchemas []*MeasurementSchema
 	timestamps         []int64
 	values             []interface{}
-	rowCount           int
+	maxRowNumber       int
+	RowSize            int
 }
 
 func (t *Tablet) Len() int {
-	return t.GetRowCount()
+	return t.RowSize
 }
 
 func (t *Tablet) Swap(i, j int) {
@@ -91,7 +89,7 @@
 		return fmt.Errorf("illegal argument columnIndex %d", columnIndex)
 	}
 
-	if rowIndex < 0 || rowIndex > int(t.rowCount) {
+	if rowIndex < 0 || rowIndex > int(t.maxRowNumber) {
 		return fmt.Errorf("illegal argument rowIndex %d", rowIndex)
 	}
 
@@ -161,7 +159,7 @@
 }
 
 func (t *Tablet) GetRowCount() int {
-	return t.rowCount
+	return t.maxRowNumber
 }
 
 func (t *Tablet) GetValueAt(columnIndex, rowIndex int) (interface{}, error) {
@@ -169,7 +167,7 @@
 		return nil, fmt.Errorf("illegal argument columnIndex %d", columnIndex)
 	}
 
-	if rowIndex < 0 || rowIndex > int(t.rowCount) {
+	if rowIndex < 0 || rowIndex > int(t.maxRowNumber) {
 		return nil, fmt.Errorf("illegal argument rowIndex %d", rowIndex)
 	}
 
@@ -194,9 +192,7 @@
 
 func (t *Tablet) GetTimestampBytes() []byte {
 	buff := &bytes.Buffer{}
-	for _, v := range t.timestamps {
-		binary.Write(buff, binary.BigEndian, v)
-	}
+	binary.Write(buff, binary.BigEndian, t.timestamps[0:t.RowSize])
 	return buff.Bytes()
 }
 
@@ -221,17 +217,17 @@
 	for i, schema := range t.measurementSchemas {
 		switch schema.DataType {
 		case BOOLEAN:
-			binary.Write(buff, binary.BigEndian, t.values[i].([]bool))
+			binary.Write(buff, binary.BigEndian, t.values[i].([]bool)[0:t.RowSize])
 		case INT32:
-			binary.Write(buff, binary.BigEndian, t.values[i].([]int32))
+			binary.Write(buff, binary.BigEndian, t.values[i].([]int32)[0:t.RowSize])
 		case INT64:
-			binary.Write(buff, binary.BigEndian, t.values[i].([]int64))
+			binary.Write(buff, binary.BigEndian, t.values[i].([]int64)[0:t.RowSize])
 		case FLOAT:
-			binary.Write(buff, binary.BigEndian, t.values[i].([]float32))
+			binary.Write(buff, binary.BigEndian, t.values[i].([]float32)[0:t.RowSize])
 		case DOUBLE:
-			binary.Write(buff, binary.BigEndian, t.values[i].([]float64))
+			binary.Write(buff, binary.BigEndian, t.values[i].([]float64)[0:t.RowSize])
 		case TEXT:
-			for _, s := range t.values[i].([]string) {
+			for _, s := range t.values[i].([]string)[0:t.RowSize] {
 				binary.Write(buff, binary.BigEndian, int32(len(s)))
 				binary.Write(buff, binary.BigEndian, []byte(s))
 			}
@@ -247,28 +243,32 @@
 	return nil
 }
 
-func NewTablet(deviceId string, measurementSchemas []*MeasurementSchema, rowCount int) (*Tablet, error) {
+func (t *Tablet) Reset() {
+	t.RowSize = 0
+}
+
+func NewTablet(deviceId string, measurementSchemas []*MeasurementSchema, maxRowNumber int) (*Tablet, error) {
 	tablet := &Tablet{
 		deviceId:           deviceId,
 		measurementSchemas: measurementSchemas,
-		rowCount:           rowCount,
+		maxRowNumber:       maxRowNumber,
 	}
-	tablet.timestamps = make([]int64, rowCount)
+	tablet.timestamps = make([]int64, maxRowNumber)
 	tablet.values = make([]interface{}, len(measurementSchemas))
 	for i, schema := range tablet.measurementSchemas {
 		switch schema.DataType {
 		case BOOLEAN:
-			tablet.values[i] = make([]bool, rowCount)
+			tablet.values[i] = make([]bool, maxRowNumber)
 		case INT32:
-			tablet.values[i] = make([]int32, rowCount)
+			tablet.values[i] = make([]int32, maxRowNumber)
 		case INT64:
-			tablet.values[i] = make([]int64, rowCount)
+			tablet.values[i] = make([]int64, maxRowNumber)
 		case FLOAT:
-			tablet.values[i] = make([]float32, rowCount)
+			tablet.values[i] = make([]float32, maxRowNumber)
 		case DOUBLE:
-			tablet.values[i] = make([]float64, rowCount)
+			tablet.values[i] = make([]float64, maxRowNumber)
 		case TEXT:
-			tablet.values[i] = make([]string, rowCount)
+			tablet.values[i] = make([]string, maxRowNumber)
 		default:
 			return nil, fmt.Errorf("illegal datatype %v", schema.DataType)
 		}
diff --git a/client/tablet_test.go b/client/tablet_test.go
index 09fc6ca..d6e34d0 100644
--- a/client/tablet_test.go
+++ b/client/tablet_test.go
@@ -29,46 +29,22 @@
 		{
 			Measurement: "restart_count",
 			DataType:    INT32,
-			Encoding:    RLE,
-			Compressor:  SNAPPY,
-			Properties: map[string]string{
-				"owner": "Mark Liu",
-			},
 		}, {
 			Measurement: "price",
 			DataType:    DOUBLE,
-			Encoding:    GORILLA,
-			Compressor:  SNAPPY,
 		}, {
 			Measurement: "tick_count",
 			DataType:    INT64,
-			Encoding:    RLE,
-			Compressor:  SNAPPY,
 		}, {
 			Measurement: "temperature",
 			DataType:    FLOAT,
-			Encoding:    GORILLA,
-			Compressor:  SNAPPY,
-			Properties: map[string]string{
-				"owner": "Mark Liu",
-			},
 		}, {
 			Measurement: "description",
 			DataType:    TEXT,
-			Encoding:    PLAIN,
-			Compressor:  SNAPPY,
-			Properties: map[string]string{
-				"owner": "Mark Liu",
-			},
 		},
 		{
 			Measurement: "status",
 			DataType:    BOOLEAN,
-			Encoding:    RLE,
-			Compressor:  SNAPPY,
-			Properties: map[string]string{
-				"owner": "Mark Liu",
-			},
 		},
 	}, size)
 	return tablet, err
@@ -95,46 +71,22 @@
 					{
 						Measurement: "restart_count",
 						DataType:    INT32,
-						Encoding:    RLE,
-						Compressor:  SNAPPY,
-						Properties: map[string]string{
-							"owner": "Mark Liu",
-						},
 					}, {
 						Measurement: "price",
 						DataType:    DOUBLE,
-						Encoding:    GORILLA,
-						Compressor:  SNAPPY,
 					}, {
 						Measurement: "tick_count",
 						DataType:    INT64,
-						Encoding:    RLE,
-						Compressor:  SNAPPY,
 					}, {
 						Measurement: "temperature",
 						DataType:    FLOAT,
-						Encoding:    GORILLA,
-						Compressor:  SNAPPY,
-						Properties: map[string]string{
-							"owner": "Mark Liu",
-						},
 					}, {
 						Measurement: "description",
 						DataType:    TEXT,
-						Encoding:    PLAIN,
-						Compressor:  SNAPPY,
-						Properties: map[string]string{
-							"owner": "Mark Liu",
-						},
 					},
 					{
 						Measurement: "status",
 						DataType:    BOOLEAN,
-						Encoding:    RLE,
-						Compressor:  SNAPPY,
-						Properties: map[string]string{
-							"owner": "Mark Liu",
-						},
 					},
 				},
 				timestamps: []int64{},
@@ -151,7 +103,7 @@
 				measurementSchemas: tt.fields.measurementSchemas,
 				timestamps:         tt.fields.timestamps,
 				values:             tt.fields.values,
-				rowCount:           tt.fields.rowCount,
+				maxRowNumber:       tt.fields.rowCount,
 			}
 			if got := tablet.getDataTypes(); !reflect.DeepEqual(got, tt.want) {
 				t.Errorf("Tablet.getDataTypes() = %v, want %v", got, tt.want)
@@ -418,6 +370,7 @@
 			tablet.SetValueAt("1", 4, 0)
 			tablet.SetValueAt(true, 5, 0)
 			tablet.SetTimestamp(3, 0)
+			tablet.RowSize++
 
 			tablet.SetValueAt(int32(2), 0, 1)
 			tablet.SetValueAt(float64(2.0), 1, 1)
@@ -426,6 +379,7 @@
 			tablet.SetValueAt("2", 4, 1)
 			tablet.SetValueAt(true, 5, 1)
 			tablet.SetTimestamp(4, 1)
+			tablet.RowSize++
 
 			tablet.SetValueAt(int32(3), 0, 2)
 			tablet.SetValueAt(float64(3.0), 1, 2)
@@ -434,6 +388,7 @@
 			tablet.SetValueAt("3", 4, 2)
 			tablet.SetValueAt(true, 5, 2)
 			tablet.SetTimestamp(1, 2)
+			tablet.RowSize++
 
 			tablet.SetValueAt(int32(4), 0, 3)
 			tablet.SetValueAt(float64(4.0), 1, 3)
@@ -442,6 +397,7 @@
 			tablet.SetValueAt("4", 4, 3)
 			tablet.SetValueAt(true, 5, 3)
 			tablet.SetTimestamp(2, 3)
+			tablet.RowSize++
 
 			if err := tablet.Sort(); (err != nil) != tt.wantErr {
 				t.Errorf("Tablet.Sort() error = %v, wantErr %v", err, tt.wantErr)
diff --git a/example/session_example.go b/example/session_example.go
index e56373a..c49e189 100644
--- a/example/session_example.go
+++ b/example/session_example.go
@@ -502,6 +502,7 @@
 func insertTablet() {
 	if tablet, err := createTablet(12); err == nil {
 		status, err := session.InsertTablet(tablet, false)
+		tablet.Reset()
 		checkError(status, err)
 	} else {
 		log.Fatal(err)
@@ -511,6 +512,7 @@
 func insertAlignedTablet() {
 	if tablet, err := createTablet(12); err == nil {
 		status, err := session.InsertAlignedTablet(tablet, false)
+		tablet.Reset()
 		checkError(status, err)
 	} else {
 		log.Fatal(err)
@@ -529,34 +531,22 @@
 		{
 			Measurement: "restart_count",
 			DataType:    client.INT32,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "price",
 			DataType:    client.DOUBLE,
-			Encoding:    client.GORILLA,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "tick_count",
 			DataType:    client.INT64,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "temperature",
 			DataType:    client.FLOAT,
-			Encoding:    client.GORILLA,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "description",
 			DataType:    client.TEXT,
-			Encoding:    client.PLAIN,
-			Compressor:  client.SNAPPY,
 		},
 		{
 			Measurement: "status",
 			DataType:    client.BOOLEAN,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		},
 	}, rowCount)
 
@@ -573,6 +563,7 @@
 		tablet.SetValueAt(rand.Float32(), 3, row)
 		tablet.SetValueAt(fmt.Sprintf("Test Device %d", row+1), 4, row)
 		tablet.SetValueAt(bool(ts%2 == 0), 5, row)
+		tablet.RowSize++
 	}
 	return tablet, nil
 }
diff --git a/example/session_pool/session_pool_example.go b/example/session_pool/session_pool_example.go
index 947941b..a4641d9 100644
--- a/example/session_pool/session_pool_example.go
+++ b/example/session_pool/session_pool_example.go
@@ -405,6 +405,7 @@
 	if err == nil {
 		if tablet, err := createTablet(12); err == nil {
 			status, err := session.InsertTablet(tablet, false)
+			tablet.Reset()
 			checkError(status, err)
 		} else {
 			log.Fatal(err)
@@ -419,6 +420,7 @@
 	if err == nil {
 		if tablet, err := createTablet(12); err == nil {
 			status, err := session.InsertAlignedTablet(tablet, false)
+			tablet.Reset()
 			checkError(status, err)
 		} else {
 			log.Fatal(err)
@@ -439,34 +441,22 @@
 		{
 			Measurement: "restart_count",
 			DataType:    client.INT32,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "price",
 			DataType:    client.DOUBLE,
-			Encoding:    client.GORILLA,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "tick_count",
 			DataType:    client.INT64,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "temperature",
 			DataType:    client.FLOAT,
-			Encoding:    client.GORILLA,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "description",
 			DataType:    client.TEXT,
-			Encoding:    client.PLAIN,
-			Compressor:  client.SNAPPY,
 		},
 		{
 			Measurement: "status",
 			DataType:    client.BOOLEAN,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		},
 	}, rowCount)
 
@@ -483,6 +473,7 @@
 		tablet.SetValueAt(rand.Float32(), 3, row)
 		tablet.SetValueAt(fmt.Sprintf("Test Device %d", row+1), 4, row)
 		tablet.SetValueAt(bool(ts%2 == 0), 5, row)
+		tablet.RowSize++
 	}
 	return tablet, nil
 }
@@ -498,11 +489,16 @@
 	}
 
 	tablets := []*client.Tablet{tablet1, tablet2}
+	tablet1.Reset()
+	tablet2.Reset()
 	session, err := sessionPool.GetSession()
 	defer sessionPool.PutBack(session)
 	if err == nil {
 		checkError(session.InsertTablets(tablets, false))
 	}
+	for _, tablet := range tablets {
+		tablet.Reset()
+	}
 
 }
 
@@ -522,6 +518,9 @@
 	if err == nil {
 		checkError(session.InsertAlignedTablets(tablets, false))
 	}
+	for _, tablet := range tablets {
+		tablet.Reset()
+	}
 
 }
 
diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go
index ed2a68d..88a0899 100644
--- a/test/e2e/e2e_test.go
+++ b/test/e2e/e2e_test.go
@@ -221,6 +221,7 @@
 	if tablet, err := createTablet(12); err == nil {
 		status, err := s.session.InsertAlignedTablet(tablet, false)
 		s.checkError(status, err)
+		tablet.Reset()
 	} else {
 		log.Fatal(err)
 	}
@@ -240,34 +241,22 @@
 		{
 			Measurement: "restart_count",
 			DataType:    client.INT32,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "price",
 			DataType:    client.DOUBLE,
-			Encoding:    client.GORILLA,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "tick_count",
 			DataType:    client.INT64,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "temperature",
 			DataType:    client.FLOAT,
-			Encoding:    client.GORILLA,
-			Compressor:  client.SNAPPY,
 		}, {
 			Measurement: "description",
 			DataType:    client.TEXT,
-			Encoding:    client.PLAIN,
-			Compressor:  client.SNAPPY,
 		},
 		{
 			Measurement: "status",
 			DataType:    client.BOOLEAN,
-			Encoding:    client.RLE,
-			Compressor:  client.SNAPPY,
 		},
 	}, rowCount)
 
@@ -284,6 +273,7 @@
 		tablet.SetValueAt(rand.Float32(), 3, row)
 		tablet.SetValueAt(fmt.Sprintf("Test Device %d", row+1), 4, row)
 		tablet.SetValueAt(bool(ts%2 == 0), 5, row)
+		tablet.RowSize++
 	}
 	return tablet, nil
 }
@@ -302,6 +292,8 @@
 
 	tablets := []*client.Tablet{tablet1, tablet2}
 	s.checkError(s.session.InsertAlignedTablets(tablets, false))
+	tablet1.Reset()
+	tablet2.Reset()
 
 	ds, err := s.session.ExecuteQueryStatement("select count(status) from root.ln.device1", nil)
 	assert := s.Require()
