You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2021/11/12 04:18:50 UTC

[iotdb] 01/01: Revert "[To rel/0.12][IOTDB-1983] Fix DescReadWriteBatchData serializing bug (#4361)"

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

jackietien pushed a commit to branch revert-4361-bugfix/cp-iotdb-1983
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 8cdf7d2b5f5106d7e9d9987fecdbd57db9f6c535
Author: Jackie Tien <Ja...@foxmail.com>
AuthorDate: Fri Nov 12 12:17:43 2021 +0800

    Revert "[To rel/0.12][IOTDB-1983] Fix DescReadWriteBatchData serializing bug (#4361)"
    
    This reverts commit 8df0c9c3ac2db6e3aeda74441296a4cc1305db68.
---
 RELEASE_NOTES.md                                   | 182 +++----
 .../org/apache/iotdb/db/utils/SerializeUtils.java  |  41 +-
 .../apache/iotdb/db/utils/SerializeUtilsTest.java  | 569 ---------------------
 .../apache/iotdb/tsfile/read/common/BatchData.java |  56 --
 .../tsfile/read/common/DescReadWriteBatchData.java |  46 --
 5 files changed, 118 insertions(+), 776 deletions(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index a77af22..29f597b 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,3 +1,4 @@
+
 <!--
 
     Licensed to the Apache Software Foundation (ASF) under one
@@ -22,14 +23,12 @@
 # Apache IoTDB 0.12.3
 
 ## Improvements
-
 * [IOTDB-842] Better Export/Import-CSV Tool
 * [IOTDB-1738] Cache paths list in batched insert plan
 * [IOTDB-1792] remove tomcat-embed dependency and make all transitive dependencies versions consistent
-* [ISSUE-4072] Parallel insert records in Session
+* [ISSUE-4072] Parallel insert records in Session 
 
 ## Bug Fixes
-
 * [IOTDB-1275] Fix backgroup exec for cli -e function causes an infinite loop
 * [IOTDB-1287] Fix C++ class Session has 2 useless sort()
 * [IOTDB-1289] fix CPP mem-leak in SessionExample.cpp insertRecords()
@@ -50,29 +49,28 @@
 * [IOTDB-1703] Fix MManager slow recover with tag
 * [IOTDB-1723] Fix concurrency issue in compaction selection
 * [IOTDB-1726] Wrong hashCode() and equals() method in ChunkMetadata
-* [IOTDB-1727] Fix Slow creation of timeseries with tag
-* [IOTDB-1731] Fix sync error between different os
+* [IOTDB-1727] Fix Slow creation of timeseries with tag 
+* [IOTDB-1731] Fix sync error between different os 
 * [IOTDB-1733] Fix dropping built-in function
 * [IOTDB-1741] Avoid double close in level compaction execution
 * [IOTDB-1785] Fix Illegal String ending with . being parsed to PartialPath
-* [IOTDB-1836] Fix Query Exception Bug after deleting all sgs
+* [IOTDB-1836] Fix Query Exception Bug after deleting all sgs 
 * [IOTDB-1837] Fix tagIndex rebuild failure after upgrade mlog from mlog.txt to mlog.bin
 * [IOTDB-1838] The compacting status in SGP is always false
-* [IOTDB-1846] Fix the error when count the total number of devices in cluster mode
+* [IOTDB-1846]Fix the error when count the total number of devices in cluster mode
 * [IOTDB-1850] Fix deserialize page merge rate limiter
 * [IOTDB-1879] Fix some Unsequence files never be merged to higher level or Sequence folder
 * [ISSUE-3945] Fix Fuzzy query not support multiDevices and alignByDevice Dataset
 * [IOTDB-1872] Fix data increases abnormally after IoTDB restarts
 * [IOTDB-1975] OOM caused by that MaxQueryDeduplicatedPathNum doesn't take effect
-* [IOTDB-1983] Fix DescReadWriteBatchData serializing bug
 * fix merge ClassCastException: MeasurementMNode
 * change sync version check to major version
 * init dummyIndex after restart cluster
 
+
 # Apache IoTDB 0.12.2
 
 ## New Features
-
 * [IOTDB-959] Add create storage group Grammar
 * [IOTDB-1399] Add a session interface to connect multiple nodes
 * [IOTDB-1466] Support device template
@@ -82,23 +80,22 @@
 * [IOTDB-1561] Support fill by specific value
 * [IOTDB-1565] Add sql: set system to readonly/writable
 * [IOTDB-1569] Timed close TsFileProcessor
-* [IOTDB-1586] Support mysql-style Like clause
+* [IOTDB-1586] Support mysql-style Like clause 
 * [ISSUE-3811] Provide a data type column for the last query dataset
 * TTL can be set to the prefix path of storage group
-* add JMX monitor to all ThreadPools in the server module
+* add JMX monitor to all ThreadPools in the server module 
 
 ## Improvements
-
 * [IOTDB-1566] Do not restrict concurrent write partitions
 * [IOTDB-1585] ModificationFile‘s write interface blocking
 * [IOTDB-1587] SessionPool optimization: a more aggressive Session creation strategy
-* Use StringCachedPool in TsFileResource to reduce the memory size
+* Use StringCachedPool in TsFileResource to reduce the memory size 
 * write performance optimization when replicaNum == 1
 * Optimize Primitive Array Manager
 * Function Improvement: add overlapped page rate in Tracing
 
-## Bug Fixes
 
+## Bug Fixes
 * [IOTDB-1282] fix C++ class SessionDataSet mem-leak
 * [IOTDB-1407] fix Filtering time series based on tags query fails Occasionally
 * [IOTDB-1437] Fix the TsFileSketchTool NPE
@@ -142,58 +139,54 @@
 * [ISSUE-3690] Memory leaks on the server when cpp client invokes checkTimeseriesExists
 * [ISSUE-3805] OOM caused by Chunk cache
 * [ISSUE-3865] Meaningless connection reset issues caused by low default value for SOMAXCONN
-* Fix DataMigrationExample OOM if migrate too many timeseries
-* Handle false positive cases which may cause NPE of tsfile bloom filter
+* Fix DataMigrationExample OOM if migrate too many timeseries 
+* Handle false positive cases which may cause NPE of tsfile bloom filter 
 * Fix Windows shell error on JDK11 & fix iotdb-env.bat not working
-* Fix cluster auto create schema bug when retry locally
+* Fix cluster auto create schema bug when retry locally 
 * Fix thrift out of sequence in cluster module
 * Skip non exist measurement in where clause in align by device
 * fix blocking query when selecting TsFile in compaction
 * Fix redundant data in compaction recover
-* Fix load tsfile with time partition enable
+* Fix load tsfile with time partition enable 
 
 ## Incompatible changes
-
 * [IOTDB-1485] Replace tsfile_size_threshold by unseq_tsfile_size/seq_tsfile_size
 
 ## Miscellaneous changes
-
 * [IOTDB-1499] Remove unused exception throwing notation in IoTDBSink
 * [IOTDB-1500] Remove current dynamic query memory control
 * [ISSUE-3674] Disable thrift code generation for Javascript
-* enable cacheLeader by default
-* add audit log when execute delete and set sg for tracing
-* modify nodeTool user to root
+* enable cacheLeader by default 
+* add audit log when execute delete and set sg for tracing 
+* modify nodeTool user to root 
 
 # Apache IoTDB 0.12.1
 
 ## Bug Fixes
-
 * [GITHUB-3373] Remove the broken cached leader connection & optimize the insertRecords method in session
 * [IOTDB-1433] Fix bug in getMetadataAndEndOffset when querying non-exist device
 * [IOTDB-1432] fix level compaction loss data
-* [IOTDB-1427] Fix compaction lock with query
+* [IOTDB-1427] Fix compaction lock with query  
 * [IOTDB-1420] Fix compaction ttl bug
-* [IOTDB-1419] Remove redundant clearCompactionStatus, fix continuous compaction doesn't take effect when
-  enablePartition
+* [IOTDB-1419] Remove redundant clearCompactionStatus, fix continuous compaction doesn't take effect when enablePartition
 * [IOTDB-1415] Fix OOM caused by ChunkCache
-* [IOTDB-1414] NPE occurred when call getStorageGroupNodeByPath() method using not exist path
+* [IOTDB-1414] NPE occurred when call getStorageGroupNodeByPath() method using not exist path  
 * [IOTDB-1412] Unclear exception message thrown when executing empty InsertTabletPlan
-* [IOTDB-1411] Fix thriftMaxFrameSize and thriftDefaultBufferSize does not in effect
+* [IOTDB-1411] Fix thriftMaxFrameSize and thriftDefaultBufferSize does not in effect  
 * [IOTDB-1398] Do not select unseq files when there are uncompacted old unseq files
 * [IOTDB-1390] Fix unseq compaction loss data bug
-* [IOTDB-1384] Fix group by bug
-* [ISSUE-3378] Fix NPE when clear upgrade folder; Fix some upgraded pageHeader missing statistics
+* [IOTDB-1384] Fix group by bug  
+* [ISSUE-3378] Fix NPE when clear upgrade folder; Fix some upgraded pageHeader missing statistics  
 * [GITHUB-3339] Try to fix sg dead lock
-* [GITHUB-3329] Fix upgrade NPE and DeadLock
-* [GITHUB-3319] Fix upgrade tool cannot close file reader
-* [IOTDB-1212] Fix The given error message is not right when executing select sin(non_existence) from root.sg1.d1
+* [GITHUB-3329] Fix upgrade NPE and DeadLock  
+* [GITHUB-3319] Fix upgrade tool cannot close file reader  
+* [IOTDB-1212] Fix The given error message is not right when executing select sin(non_existence) from root.sg1.d1 
 * [IOTDB-1219] Fix a potential NPE issue in UDF module
 * [IOTDB-1286] Fix 4 C++ mem-leak points
 * [IOTDB-1294] Fix delete operation become invalid after compaction
 * [IOTDB-1313] Fix lossing time precision when import csv with unsupported timestamp format
-* [IOTDB-1316] The importCsv tool should continue inserting if a part of insertion failed
-* [IOTDB-1317] Fix log CatchUp always failed due to not check the follower's match index
+* [IOTDB-1316] The importCsv tool should continue inserting if a part of insertion failed 
+* [IOTDB-1317] Fix log CatchUp always failed due to not check the follower's match index 
 * [IOTDB-1323] Fix return a success message when encounter RuntimeException during the insertion process
 * [IOTDB-1325] Fix StackOverflow Exception in group by natural month query
 * [IOTDB-1330] Fix the load tsfile bug when the cross multi partition's tsfile only have one page
@@ -205,15 +198,13 @@
 * Fix the plan index is always zero when using insertRecords interface to run the cluster
 * Add authority check for users create timeseries using executeBatch interface without the privilege
 * Fix versionInfo NPE when query upgrading 0.11 tsfile
-* Fix upgrade tool cannot load old tsfile if time partition enabled in 0.11
+* Fix upgrade tool cannot load old tsfile if time partition enabled in 0.11 
 * Fix import csv throw ArrayOutOfIndexError when the last value in a line is null
 * Fix upgrade tool cannot close file reader
 
 ## Improvements
-
 * [GITHUB-3399] Change the default primitive array size to 32
-* [IOTDB-1387] Support Without Null ALL in align by device clause, Filter RowRecord automatically if any column in it is
-  null or all columns are null
+* [IOTDB-1387] Support Without Null ALL in align by device clause, Filter RowRecord automatically if any column in it is null or all columns are null
 * [IOTDB-1385] Extract the super user to the configuration
 * [IOTDB-1315] ExportCsvTool should support timestamp `yyyy-MM-dd'T'HH:mm:ss.SSSZ`
 * [IOTDB-1339] optimize TimeoutChangeableTSnappyFramedTransport
@@ -223,7 +214,6 @@
 * Optimize sync leader for meta
 
 ## New Features
-
 * [GITHUB-3389] TTL can be set to any path
 * [GITHUB-3387] Add parameter compaction_interval=10000ms
 * [IOTDB-1190] Fully support HTTP URL char set in timeseries path
@@ -232,7 +222,6 @@
 * [ISSUE-3089] Make it possible for storage groups to have name with hyphen
 
 ## Miscellaneous changes
-
 * [GITHUB-3346] upgrade netty and claim exclusion for enforcer check
 * [IOTDB-1259] upgrade libthrift from 0.12.0/0.13.0 to 0.14.1
 * Uncomment the less used configurations
@@ -241,11 +230,10 @@
 # Apache IoTDB 0.12.0
 
 ## New Features
-
 * [IOTDB-68] New shared-nothing cluster
 * [IOTDB-507] Add zeppelin-interpreter module
 * [IOTDB-825] Aggregation by natural month
-* [IOTDB-890] support SDT lossy compression
+* [IOTDB-890] support SDT lossy compression 
 * [IOTDB-944] Support UDTF (User-defined Timeseries Generating Function)
 * [IOTDB-965] Add timeout parameter for query
 * [IOTDB-1077] Add insertOneDeviceRecords API in java session
@@ -259,12 +247,11 @@
 * [PR-2605] Add level merge to "merge" command
 
 ## Incompatible changes
-
 * [IOTDB-1081] New TsFile Format
 * [ISSUE-2730] Add the number of unseq merge times in TsFile name.
 
-## Miscellaneous changes
 
+## Miscellaneous changes
 * [IOTDB-868] Change mlog from txt to bin
 * [IOTDB-1069] Restrict the flushing memtable number to avoid OOM when mem_control is disabled
 * [IOTDB-1104] Refactor the error handling process of query exceptions
@@ -277,7 +264,6 @@
 * [PR-2967] Log memory usage information in SystemInfo for better diagnosis
 
 ## Bug Fixes
-
 * [IOTDB-1049] Fix NullpointerException and a delete bug in Last query
 * [IOTDB-1050] Fix Count timeserise column name is wrong
 * [IOTDB-1068] Fix Time series metadata cache bug
@@ -304,11 +290,10 @@
 # Apache IoTDB 0.11.4
 
 ## Bug Fixes
-
 * IOTDB-1303 Disable group by without aggregation function in select clause
-* IOTDB-1306 Fix insertion blocked caused the deadlock in memory control module
+* IOTDB-1306 Fix insertion blocked caused the deadlock in memory control module 
 * IOTDB-1308 Fix users with READ_TIMESERIES permission cannot execute group by fill queries
-* IOTDB-1344 Fix cannot create timeseries caused by the timeseries count doesn't reset when deleting storage group
+* IOTDB-1344 Fix cannot create timeseries caused by the timeseries count doesn't reset when deleting storage group 
 * IOTDB-1384 Some value will disappear while using group by query
 * IOTDB-1398 Do not select unseq files when there are uncompacted old unseq files
 * ISSUE-3316 Fix query result with the same time range is inconsistent in group by query
@@ -317,19 +302,16 @@
 * Fix overlapped data should be consumed first exception when query
 
 ## Improvements
-
 * IOTDB-1356 Separate unseq_file_num_in_each_level from selecting candidate file in unseq compaction
 * IOTDB-1412 Unclear exception message thrown when executing empty InsertTabletPlan
 * continuous compaction in level compaction strategy when no tsfile is to be closed
 
 ## New Features
-
 * support brackets with number in timeseries path
 
 # Apache IoTDB 0.11.3
 
 ## Bug Fixes
-
 * ISSUE-2505 ignore PathNotExistException in recover and change recover error to warn
 * IOTDB-1119 Fix C++ SessionDataSet bug when reading value buffer
 * Fix SessionPool does not recycle session and can not offer new Session due to RunTimeException
@@ -361,7 +343,6 @@
 * Fix high CPU usage during the compaction process
 
 ## Improvements
-
 * IOTDB-1140 optimize regular data encoding
 * Add more log for better tracing
 * Add backgroup exec for cli -e function
@@ -369,13 +350,12 @@
 * Change last cache log to debug level
 
 ## New Features
-
 * Add explain sql support
 
+
 # Apache IoTDB 0.11.2
 
 ## Bug Fixes
-
 * IOTDB-1049 Fix Nullpointer exception and a delete bug in Last query
 * IOTDB-1060 Support full deletion for delete statement without where clause
 * IOTDB-1068 Fix Time series metadata cache bug
@@ -397,7 +377,6 @@
 # Apache IoTDB 0.11.1
 
 ## Bug Fixes
-
 * IOTDB-990 cli parameter maxPRC shouldn't to be set zero
 * IOTDB-993 Fix tlog bug
 * IOTDB-994 Fix can not get last_value while doing the aggregation query along with first_value
@@ -485,7 +464,7 @@
 * IOTDB-963 Redo deleteStorageGroupPlan failed when recovering
 * IOTDB-967 Fix xxx does not have the child node xxx Bug in count timeseries
 * IOTDB-970 Restrict log file number and size
-* IOTDB-971 More precise error messages of slimit and soffset
+* IOTDB-971 More precise error messages of slimit and soffset 
 * IOTDB-975 when series does not exist in TsFile, reading wrong ChunkMetadataList
 
 # Apache IoTDB (incubating) 0.10.1
@@ -500,20 +479,21 @@
 * Query result is not correct when some unsequence data exists
 * Change the default fetch size to 10000 in session
 * [IOTDB-798] fix a set rowLimit and rowOffset bug
-* [IOTDB-800] Add a new config type for those parameters which could not be modified any more after the first start
+* [IOTDB-800] Add a new config type for those parameters which could not be modified any more after the first start 
 * [IOTDB-802] Improve "group by" query performance
-* [IOTDB-799] remove log visualizer tool from v0.10
-* fix license-binary
-* [IOTDB-805] Fix BufferUnderflowException when querying TsFile stored in HDFS
+* [IOTDB-799] remove log visualizer tool from v0.10 
+* fix license-binary  
+* [IOTDB-805] Fix BufferUnderflowException when querying TsFile stored in HDFS 
 * python session client ver-0.10.0
-* [IOTDB-808] fix bug in selfCheck() truncate
-* fix doc of MeasurementSchema in Tablet
+* [IOTDB-808] fix bug in selfCheck() truncate 
+* fix doc of MeasurementSchema in Tablet 
 * [IOTDB-811] fix upgrading mlog many times when upgrading system.properties crashed
 * Improve IoTDB restart process
 * remove jol-core dependency which is introduced by hive-serde 2.8.4
 * remove org.json dependency because of license compatibility
 * [ISSUE-1551] fix set historical version when loading additional tsfile
 
+
 # Apache IoTDB (incubating) 0.10.0
 
 ## New Features
@@ -534,8 +514,7 @@
 * IOTDB-396 Support new query clause: disable align, e.g., select * from root disable align
 * IOTDB-447 Support querying non-existing measurement and constant measurement
 * IOTDB-448 Add IN operation, e.g., where time in (1,2,3)
-* IOTDB-456 Support GroupByFill Query, e.g., select last_value(s1) from root.sg.d1 GROUP BY ([1, 10), 2ms) FILL(
-  int32[previousUntilLast])
+* IOTDB-456 Support GroupByFill Query, e.g., select last_value(s1) from root.sg.d1 GROUP BY ([1, 10), 2ms) FILL(int32[previousUntilLast])
 * IOTDB-467 The CLI displays query results in a batch manner
 * IOTDB-497 Support Apache Flink Connector with IoTDB
 * IOTDB-558 add text support for grafana
@@ -563,9 +542,10 @@
 * IOTDB-708 add config for inferring data type from string value
 * IOTDB-715 Support previous time range in previousuntillast
 * IOTDB-719 add avg_series_point_number_threshold in config
-* IOTDB-731 Continue write inside InsertPlan
+* IOTDB-731 Continue write inside InsertPlan 
 * IOTDB-734 Add Support for NaN in Double / Floats in SQL Syntax.
-* IOTDB-744 Support upsert alias
+* IOTDB-744 Support upsert alias 
+
 
 ## Incompatible changes
 
@@ -576,8 +556,7 @@
 * IOTDB-506 upgrade the rpc protocol to v2 to reject clients or servers that version < 0.10
 * IOTDB-587 TsFile is upgraded to version 2
 * IOTDB-593 add metaOffset in TsFileMetadata
-* IOTDB-597 Rename methods in Session: insertBatch to insertTablet, insertInBatch to insertRecords, insert to
-  insertRecord
+* IOTDB-597 Rename methods in Session: insertBatch to insertTablet, insertInBatch to insertRecords, insert to insertRecord
 * RPC is incompatible, you can not use client-v0.9 to connect with server-v0.10
 * TsFile format is incompatible, will be upgraded when starting 0.10
 * Refine exception code in native api
@@ -596,11 +575,11 @@
 * IOTDB-628 rename client to cli
 * IOTDB-621 Add Check isNull in Field for querying using session
 * IOTDB-632 Performance improve for PreviousFill/LinearFill
-* IOTDB-695 Accelerate the count timeseries query
-* IOTDB-707 Optimize TsFileResource memory usage
+* IOTDB-695 Accelerate the count timeseries query 
+* IOTDB-707 Optimize TsFileResource memory usage  
 * IOTDB-730 continue write in MQTT when some events are failed
-* IOTDB-729 shutdown uncessary threadpool
-* IOTDB-733 Enable setting for mqtt max length
+* IOTDB-729 shutdown uncessary threadpool 
+* IOTDB-733 Enable setting for mqtt max length 
 * IOTDB-732 Upgrade fastjson version to 1.2.70
 * Allow "count timeseries" without a prefix path
 * Add max backup log file number
@@ -610,11 +589,12 @@
 * Add metaquery in python example
 * Set inferType of MQTT InsertPlan to true
 
+
+
 ## Bug Fixes
 
 * IOTDB-125 Potential Concurrency bug while deleting and inserting happen together
-* IOTDB-185 fix start-client failed on WinOS if there is blank space in the file path; let start-server.bat suport
-  jdk12,13 etc
+* IOTDB-185 fix start-client failed on WinOS if there is blank space in the file path; let start-server.bat suport jdk12,13 etc
 * IOTDB-304 Fix bug of incomplete HDFS URI
 * IOTDB-341 Fix data type bug in grafana
 * IOTDB-346 Fix a bug of renaming tsfile in loading function
@@ -638,8 +618,8 @@
 * IOTDB-692 merge behaves incorrectly
 * IOTDB-712 Meet BufferUnderflowException and can not recover
 * IOTDB-718 Fix wrong time precision of NOW()
-* IOTDB-735 Fix Concurrent error for MNode when creating time series automatically
-* IOTDB-738 Fix measurements has blank
+* IOTDB-735 Fix Concurrent error for MNode when creating time series automatically 
+* IOTDB-738 Fix measurements has blank 
 
 * fix concurrent auto create schema conflict bug
 * fix meet incompatible file error in restart
@@ -649,10 +629,10 @@
 * Fix batch execution bug, the following sqls will all fail after one error sql
 * Fix recover endTime set bug
 
+
 # Apache IoTDB (incubating) 0.9.3
 
 ## Bug Fixes
-
 - IOTDB-531 Fix that JDBC URL does not support domain issue
 - IOTDB-563 Fix pentaho cannot be downloaded because of spring.io address
 - IOTDB-608 Skip error Mlog
@@ -660,34 +640,32 @@
 - IOTDB-636 Fix Grafana connector does not use correct time unit
 
 ## Miscellaneous changes
-
 - IOTDB-528 Modify grafana group by
 - IOTDB-635 Add workaround when doing Aggregation over boolean Series
 - Remove docs of Load External Tsfile
 - Add Grafana IoTDB Bridge Artifact to distribution in tools/grafana folder
 
+
 # Apache IoTDB (incubating) 0.9.2
 
 ## Bug Fixes
-
 - IOTDB-553 Fix Return Empty ResultSet when queried series doesn't exist
 - IOTDB-575 add default jmx user and password; fix issues that jmx can't be accessed remotely
 - IOTDB-584 Fix InitializerError when recovering files on HDFS
 - Fix batch insert once an illegal sql occurs all the sqls after that will not succeed
-- Fix concurrent modification exception when iterator TsFileResourceList
-- Fix some HDFS config issues
+- Fix concurrent modification exception when iterator TsFileResourceList 
+- Fix some HDFS config issues 
 - Fix runtime exception not be catched and sync schema pos was nullpointer bug in DataTransferManager
 - Fix python rpc grammar mistakes
 - Fix upgrade ConcurrentModificationException
 
 ## Miscellaneous changes
-
 - IOTDB-332 support Chinese characters in path
-- IOTDB-316 add AVG function to 4-SQL Reference.md and modify style
+- IOTDB-316 add AVG function to 4-SQL Reference.md and modify style 
 - improve start-server.bat by using quotes to protect against empty entries
 - Add Chinese documents for chapter 4.2
 - change download-maven-plugin to 1.3.0
-- add session pool
+- add session pool 
 - add insertInBatch in Session
 - add insertInBatch to SessionPool
 - modify 0.9 docs to fit website
@@ -731,7 +709,7 @@
 * IOTDB-188 Delete storage group
 * IOTDB-193 Create schema automatically when inserting
 * IOTDB-198 Add sync module (Sync TsFiles between IoTDB instances)
-* IOTDB-199 Add a log visualization tool
+* IOTDB-199 Add a log visualization tool 
 * IOTDB-203 Add "group by device" function for narrow table display
 * IOTDB-205 Support storage-group-level Time To Live (TTL)
 * IOTDB-208 Add Bloom filter in TsFile
@@ -740,7 +718,7 @@
 * IOTDB-239 Add interface for showing devices
 * IOTDB-241 Add query and non query interface in session
 * IOTDB-249 Enable lowercase in create_timeseries sql
-* IOTDB-253 Support time expression
+* IOTDB-253 Support time expression 
 * IOTDB-259 Level query of path
 * IOTDB-282 Add "show version"
 * IOTDB-294 Online upgrade from 0.8.0 to 0.9.0
@@ -749,17 +727,15 @@
 * Generate cpp, go, and python thrift files under service-rpc
 * Display cache hit rate through jconsole
 * Support inserting data that time < 0
-* Add interface (Delete timeseries) in session
+* Add interface (Delete timeseries) in session 
 * Add a tool to print tsfileResources (each device's start and end time)
 * Support watermark feature
 * Add micro and nano timestamp precision
 
 ## Incompatible changes
 
-* RPC is incompatible, you can not use client-0.8.0 to connect with server-0.9.0 or use client-0.9.0 to connect with
-  server-0.8.0.
-* Server is backward compatible, server-0.9.0 could run on data folder of 0.8.0. The data file will be upgraded
-  background.
+* RPC is incompatible, you can not use client-0.8.0 to connect with server-0.9.0 or use client-0.9.0 to connect with server-0.8.0.
+* Server is backward compatible, server-0.9.0 could run on data folder of 0.8.0. The data file will be upgraded background.
 * Change map key in TsDigest from String to enum data type
 
 ## Miscellaneous changes
@@ -775,8 +751,7 @@
 * IOTDB-221 Add a python client example
 * IOTDB-233 keep metadata plan clear
 * IOTDB-251 Improve TSQueryDataSet structure in RPC
-* IOTDB-257 Makes the client stop fetch when dataSize equals maxPrintRowCount and change client fetchSize less than
-  maxPrintRowCount
+* IOTDB-257 Makes the client stop fetch when dataSize equals maxPrintRowCount and change client fetchSize less than maxPrintRowCount
 * IOTDB-258 Add documents for Query History Visualization Tool and Shared Storage Architecture
 * IOTDB-265 Re-adjust the threshold size of memtable
 * IOTDB-267 Reduce IO operations in deserializing chunk header
@@ -788,7 +763,7 @@
 * IOTDB-295 Refactor db.exception
 * Reconstruct Antlr3 grammar to improve performance
 * Tooling for release
-* Modified Decoder and SequenceReader to support old version of TsFile
+* Modified Decoder and SequenceReader to support old version of TsFile 
 * Remove jdk constrain of jdk8 and 11
 * Modify print function in AbstractClient
 * Avoid second execution of parseSQLToPhysicalPlan in executeStatement
@@ -799,8 +774,7 @@
 
 ## Bug Fixes
 
-* IOTDB-168&169 Fix a bug in export-csv tool and fix compatibility of timestamp formats in exportCsv, client display and
-  sql
+* IOTDB-168&169 Fix a bug in export-csv tool and fix compatibility of timestamp formats in exportCsv, client display and sql
 * IOTDB-174 Fix querying timeseries interface cannot make a query by the specified path prefix
 * IOTDB-195 Using String.getBytes(utf-9).length to replace string.length() in ChunkGroupMetadata for supporting Chinese
 * IOTDB-211 Use "%IOTDB_HOME%\lib\*" to refers to all .jar files in the directory in start-server.bat
@@ -819,11 +793,11 @@
 
 # Apache IoTDB (incubating) 0.8.2
 
-This is a bug-fix version of 0.8.1
+ This is a bug-fix version of 0.8.1 
 
-- IOTDB-264 lack checking datatype before writing WAL
-- IOTDB-317 Fix "flush + wrong aggregation" causes failed query in v0.8.x
-- NOTICE and LICENSE file update
+-  IOTDB-264 lack checking datatype before writing WAL 
+-  IOTDB-317 Fix "flush + wrong aggregation" causes failed query in v0.8.x 
+-  NOTICE and LICENSE file update 
 
 # Apache IoTDB (incubating) 0.8.1
 
@@ -836,6 +810,7 @@ This is a bug-fix version of 0.8.0
 * Abnormal publishing of sequence and unsequence data folders in DirectoryManager
 * Fix a bug in TimeRange's intersects function
 
+
 # Apache IoTDB (incubating) 0.8.0
 
 This is the first official release of Apache IoTDB after joining the Incubator.
@@ -912,8 +887,7 @@ If you use the previous unofficial version 0.7.0. It is incompatible with 0.8.0.
 
 * IOTDB-20 Need to support UPDATE
 * IOTDB-124 Lost timeseries info after restart IoTDB
-* IOTDB-125 [potential] a concurrency conflict may occur when a delete command and insertion command appears
-  concurrently
+* IOTDB-125 [potential] a concurrency conflict may occur when a delete command and insertion command appears concurrently
 * IOTDB-126 IoTDB will not be closed immediately after run 'stop-server.sh' script
 * IOTDB-127 Chinese version documents problems
 
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/SerializeUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/SerializeUtils.java
index b58a8ba..c2ccae9 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/SerializeUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/SerializeUtils.java
@@ -125,7 +125,46 @@ public class SerializeUtils {
       outputStream.writeInt(length);
       outputStream.write(dataType.ordinal());
       outputStream.write(batchData.getBatchDataType().ordinal());
-      batchData.serializeData(outputStream);
+      switch (dataType) {
+        case BOOLEAN:
+          for (int i = 0; i < length; i++) {
+            outputStream.writeLong(batchData.getTimeByIndex(i));
+            outputStream.writeBoolean(batchData.getBooleanByIndex(i));
+          }
+          break;
+        case DOUBLE:
+          for (int i = 0; i < length; i++) {
+            outputStream.writeLong(batchData.getTimeByIndex(i));
+            outputStream.writeDouble(batchData.getDoubleByIndex(i));
+          }
+          break;
+        case FLOAT:
+          for (int i = 0; i < length; i++) {
+            outputStream.writeLong(batchData.getTimeByIndex(i));
+            outputStream.writeFloat(batchData.getFloatByIndex(i));
+          }
+          break;
+        case TEXT:
+          for (int i = 0; i < length; i++) {
+            outputStream.writeLong(batchData.getTimeByIndex(i));
+            Binary binary = batchData.getBinaryByIndex(i);
+            outputStream.writeInt(binary.getLength());
+            outputStream.write(binary.getValues());
+          }
+          break;
+        case INT64:
+          for (int i = 0; i < length; i++) {
+            outputStream.writeLong(batchData.getTimeByIndex(i));
+            outputStream.writeLong(batchData.getLongByIndex(i));
+          }
+          break;
+        case INT32:
+          for (int i = 0; i < length; i++) {
+            outputStream.writeLong(batchData.getTimeByIndex(i));
+            outputStream.writeInt(batchData.getIntByIndex(i));
+          }
+          break;
+      }
     } catch (IOException ignored) {
       // ignored
     }
diff --git a/server/src/test/java/org/apache/iotdb/db/utils/SerializeUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/utils/SerializeUtilsTest.java
index d6416b7..5924589 100644
--- a/server/src/test/java/org/apache/iotdb/db/utils/SerializeUtilsTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/utils/SerializeUtilsTest.java
@@ -21,8 +21,6 @@ package org.apache.iotdb.db.utils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.read.common.BatchData;
-import org.apache.iotdb.tsfile.read.common.DescReadBatchData;
-import org.apache.iotdb.tsfile.read.common.DescReadWriteBatchData;
 import org.apache.iotdb.tsfile.utils.Binary;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
@@ -286,571 +284,4 @@ public class SerializeUtilsTest {
     ByteBuffer buffer = SerializeUtils.serializeLongs(array);
     Assert.assertArrayEquals(array, SerializeUtils.deserializeLongs(buffer));
   }
-
-  @Test
-  public void descReadWriteBatchDataTest() {
-    descReadWriteBatchDataSerializableTest(0);
-    descReadWriteBatchDataSerializableTest(1);
-    descReadWriteBatchDataSerializableTest(10);
-    descReadWriteBatchDataSerializableTest(16);
-    descReadWriteBatchDataSerializableTest(100);
-    descReadWriteBatchDataSerializableTest(1000);
-    descReadWriteBatchDataSerializableTest(1500);
-  }
-
-  @Test
-  public void descReadBatchDataTest() {
-    descReadBatchDataSerializableTest(0);
-    descReadBatchDataSerializableTest(1);
-    descReadBatchDataSerializableTest(10);
-    descReadBatchDataSerializableTest(16);
-    descReadBatchDataSerializableTest(100);
-    descReadBatchDataSerializableTest(1000);
-    descReadBatchDataSerializableTest(1500);
-  }
-
-  @Test
-  public void batchDataTest() {
-    batchDataSerializableTest(0);
-    batchDataSerializableTest(1);
-    batchDataSerializableTest(10);
-    batchDataSerializableTest(16);
-    batchDataSerializableTest(100);
-    batchDataSerializableTest(1000);
-    batchDataSerializableTest(1500);
-  }
-  // In DescReadWriteBatchData, read has the same order with descending write
-  private void descReadWriteBatchDataSerializableTest(int dataSize) {
-    double E = 0.00001;
-    String debugMsg = "Data size: " + dataSize + ", Data type: ";
-    // test INT64
-    TSDataType dataType = TSDataType.INT64;
-    DescReadWriteBatchData data = new DescReadWriteBatchData(dataType);
-    String fullMsg = debugMsg + dataType;
-    for (int i = dataSize; i > 0; i--) {
-      data.putLong(i, i);
-    }
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    DataOutputStream outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray());
-    BatchData data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadWriteBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getLongByIndex(i));
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getLong());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test INT32
-    dataType = TSDataType.INT32;
-    data = new DescReadWriteBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = dataSize; i > 0; i--) {
-      data.putInt(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadWriteBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getIntByIndex(i));
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getInt());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test DOUBLE
-    dataType = TSDataType.DOUBLE;
-    data = new DescReadWriteBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = dataSize; i > 0; i--) {
-      data.putDouble(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadWriteBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getDoubleByIndex(i), E);
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getDouble(), E);
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test FLOAT
-    dataType = TSDataType.FLOAT;
-    data = new DescReadWriteBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = dataSize; i > 0; i--) {
-      data.putFloat(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadWriteBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getFloatByIndex(i), E);
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getFloat(), E);
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test BOOLEAN
-    dataType = TSDataType.BOOLEAN;
-    data = new DescReadWriteBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = dataSize; i > 0; i--) {
-      data.putBoolean(i, i % 3 == 0);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadWriteBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, (i + 1) % 3 == 0, data2.getBooleanByIndex(i));
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i % 3 == 0, data2.getBoolean());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test BINARY
-    dataType = TSDataType.TEXT;
-    data = new DescReadWriteBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = dataSize; i > 0; i--) {
-      data.putBinary(i, Binary.valueOf(String.valueOf(i)));
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadWriteBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(
-          fullMsg, String.valueOf(i + 1), data2.getBinaryByIndex(i).getStringValue());
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, String.valueOf(i), data2.getBinary().getStringValue());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-  }
-  // In DescReadBatchData, read has a reverse order with ascending write
-  private void descReadBatchDataSerializableTest(int dataSize) {
-    double E = 0.00001;
-    String debugMsg = "Data size: " + dataSize + ", Data type: ";
-    // test INT64
-    TSDataType dataType = TSDataType.INT64;
-    DescReadBatchData data = new DescReadBatchData(dataType);
-    String fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putLong(i, i);
-    }
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    DataOutputStream outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray());
-    BatchData data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getLongByIndex(i));
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getLong());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test INT32
-    dataType = TSDataType.INT32;
-    data = new DescReadBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putInt(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getIntByIndex(i));
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getInt());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test DOUBLE
-    dataType = TSDataType.DOUBLE;
-    data = new DescReadBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putDouble(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getDoubleByIndex(i), E);
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getDouble(), E);
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test FLOAT
-    dataType = TSDataType.FLOAT;
-    data = new DescReadBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putFloat(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getFloatByIndex(i), E);
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getFloat(), E);
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test BOOLEAN
-    dataType = TSDataType.BOOLEAN;
-    data = new DescReadBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putBoolean(i, i % 3 == 0);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, (i + 1) % 3 == 0, data2.getBooleanByIndex(i));
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i % 3 == 0, data2.getBoolean());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test BINARY
-    dataType = TSDataType.TEXT;
-    data = new DescReadBatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putBinary(i, Binary.valueOf(String.valueOf(i)));
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertTrue(fullMsg, data2 instanceof DescReadBatchData);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(
-          fullMsg, String.valueOf(i + 1), data2.getBinaryByIndex(i).getStringValue());
-    }
-    for (int i = dataSize; i > 0; i--) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, String.valueOf(i), data2.getBinary().getStringValue());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-  }
-  // In BatchData, read has a reverse order with ascending write
-  private void batchDataSerializableTest(int dataSize) {
-    double E = 0.00001;
-    String debugMsg = "Data size: " + dataSize + ", Data type: ";
-    // test INT64
-    TSDataType dataType = TSDataType.INT64;
-    BatchData data = new BatchData(dataType);
-    String fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putLong(i, i);
-    }
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    DataOutputStream outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray());
-    BatchData data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getLongByIndex(i));
-    }
-    for (int i = 1; i <= dataSize; i++) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getLong());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test INT32
-    dataType = TSDataType.INT32;
-    data = new BatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putInt(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getIntByIndex(i));
-    }
-    for (int i = 1; i <= dataSize; i++) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getInt());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test DOUBLE
-    dataType = TSDataType.DOUBLE;
-    data = new BatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putDouble(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getDoubleByIndex(i), E);
-    }
-    for (int i = 1; i <= dataSize; i++) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getDouble(), E);
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test FLOAT
-    dataType = TSDataType.FLOAT;
-    data = new BatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putFloat(i, i);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, i + 1, data2.getFloatByIndex(i), E);
-    }
-    for (int i = 1; i <= dataSize; i++) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i, data2.getFloat(), E);
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test BOOLEAN
-    dataType = TSDataType.BOOLEAN;
-    data = new BatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putBoolean(i, i % 3 == 0);
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(fullMsg, (i + 1) % 3 == 0, data2.getBooleanByIndex(i));
-    }
-    for (int i = 1; i <= dataSize; i++) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, i % 3 == 0, data2.getBoolean());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-    // test BINARY
-    dataType = TSDataType.TEXT;
-    data = new BatchData(dataType);
-    fullMsg = debugMsg + dataType;
-    for (int i = 1; i <= dataSize; i++) {
-      data.putBinary(i, Binary.valueOf(String.valueOf(i)));
-    }
-    baos = new ByteArrayOutputStream();
-    outputStream = new DataOutputStream(baos);
-    SerializeUtils.serializeBatchData(data, outputStream);
-    buffer = ByteBuffer.wrap(baos.toByteArray());
-    data2 = SerializeUtils.deserializeBatchData(buffer);
-    Assert.assertEquals(fullMsg, dataSize, data2.length());
-    if (dataSize > 0) {
-      Assert.assertEquals(fullMsg, 1L, data2.getMinTimestamp());
-      Assert.assertEquals(fullMsg, dataSize, data2.getMaxTimestamp());
-    }
-    for (int i = 0; i < dataSize; i++) {
-      Assert.assertEquals(fullMsg, i + 1, data2.getTimeByIndex(i));
-      Assert.assertEquals(
-          fullMsg, String.valueOf(i + 1), data2.getBinaryByIndex(i).getStringValue());
-    }
-    for (int i = 1; i <= dataSize; i++) {
-      Assert.assertTrue(fullMsg, data2.hasCurrent());
-      Assert.assertEquals(fullMsg, i, data2.currentTime());
-      Assert.assertEquals(fullMsg, String.valueOf(i), data2.getBinary().getStringValue());
-      data2.next();
-    }
-    Assert.assertFalse(fullMsg, data2.hasCurrent());
-  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
index a369ac6..ab07c0a 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
@@ -32,8 +32,6 @@ import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsFloat;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsInt;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsLong;
 
-import java.io.DataOutputStream;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -512,37 +510,30 @@ public class BatchData {
     return this.count;
   }
 
-  /** Get the idx th timestamp by the time ascending order */
   public long getTimeByIndex(int idx) {
     return this.timeRet.get(idx / capacity)[idx % capacity];
   }
 
-  /** Get the idx th long value by the time ascending order */
   public long getLongByIndex(int idx) {
     return this.longRet.get(idx / capacity)[idx % capacity];
   }
 
-  /** Get the idx th double value by the time ascending order */
   public double getDoubleByIndex(int idx) {
     return this.doubleRet.get(idx / capacity)[idx % capacity];
   }
 
-  /** Get the idx th int value by the time ascending order */
   public int getIntByIndex(int idx) {
     return this.intRet.get(idx / capacity)[idx % capacity];
   }
 
-  /** Get the idx th float value by the time ascending order */
   public float getFloatByIndex(int idx) {
     return this.floatRet.get(idx / capacity)[idx % capacity];
   }
 
-  /** Get the idx th binary value by the time ascending order */
   public Binary getBinaryByIndex(int idx) {
     return binaryRet.get(idx / capacity)[idx % capacity];
   }
 
-  /** Get the idx th boolean value by the time ascending order */
   public boolean getBooleanByIndex(int idx) {
     return booleanRet.get(idx / capacity)[idx % capacity];
   }
@@ -586,53 +577,6 @@ public class BatchData {
   }
 
   /**
-   * For any implementation of BatchData, the data serializing sequence must equal the one of
-   * writing, otherwise after deserializing the sequence will be reversed
-   */
-  public void serializeData(DataOutputStream outputStream) throws IOException {
-    switch (dataType) {
-      case BOOLEAN:
-        for (int i = 0; i < length(); i++) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeBoolean(getBooleanByIndex(i));
-        }
-        break;
-      case DOUBLE:
-        for (int i = 0; i < length(); i++) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeDouble(getDoubleByIndex(i));
-        }
-        break;
-      case FLOAT:
-        for (int i = 0; i < length(); i++) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeFloat(getFloatByIndex(i));
-        }
-        break;
-      case TEXT:
-        for (int i = 0; i < length(); i++) {
-          outputStream.writeLong(getTimeByIndex(i));
-          Binary binary = getBinaryByIndex(i);
-          outputStream.writeInt(binary.getLength());
-          outputStream.write(binary.getValues());
-        }
-        break;
-      case INT64:
-        for (int i = 0; i < length(); i++) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeLong(getLongByIndex(i));
-        }
-        break;
-      case INT32:
-        for (int i = 0; i < length(); i++) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeInt(getIntByIndex(i));
-        }
-        break;
-    }
-  }
-
-  /**
    * This method is used to reset batch data when more than one group by aggregation functions visit
    * the same batch data
    */
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/DescReadWriteBatchData.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/DescReadWriteBatchData.java
index 37aff3c..ed6e6c2 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/DescReadWriteBatchData.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/DescReadWriteBatchData.java
@@ -22,8 +22,6 @@ import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.Binary;
 
-import java.io.DataOutputStream;
-import java.io.IOException;
 import java.util.LinkedList;
 
 /**
@@ -363,50 +361,6 @@ public class DescReadWriteBatchData extends DescReadBatchData {
         .get((idx + writeCurArrayIndex + 1) / capacity)[(idx + writeCurArrayIndex + 1) % capacity];
   }
 
-  @Override
-  public void serializeData(DataOutputStream outputStream) throws IOException {
-    switch (dataType) {
-      case BOOLEAN:
-        for (int i = length() - 1; i >= 0; i--) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeBoolean(getBooleanByIndex(i));
-        }
-        break;
-      case DOUBLE:
-        for (int i = length() - 1; i >= 0; i--) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeDouble(getDoubleByIndex(i));
-        }
-        break;
-      case FLOAT:
-        for (int i = length() - 1; i >= 0; i--) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeFloat(getFloatByIndex(i));
-        }
-        break;
-      case TEXT:
-        for (int i = length() - 1; i >= 0; i--) {
-          outputStream.writeLong(getTimeByIndex(i));
-          Binary binary = getBinaryByIndex(i);
-          outputStream.writeInt(binary.getLength());
-          outputStream.write(binary.getValues());
-        }
-        break;
-      case INT64:
-        for (int i = length() - 1; i >= 0; i--) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeLong(getLongByIndex(i));
-        }
-        break;
-      case INT32:
-        for (int i = length() - 1; i >= 0; i--) {
-          outputStream.writeLong(getTimeByIndex(i));
-          outputStream.writeInt(getIntByIndex(i));
-        }
-        break;
-    }
-  }
-
   /**
    * Read: When put data, the writeIndex increases while the readIndex remains 0. For descending
    * read, we need to read from writeIndex to writeCurArrayIndex