Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 根据待合并文件列表,依次使用每个文件的TsFileSequenceReader,获取该文件的设备列表,生成所有的device集合
  • 遍历device集合
    • 根据文件从文件读取器cache中得到相应的TsFileSequenceReader
    • 根据device读取各个文件对应的ChunkMetadataListIterator(ChunkMetadataListIterator每次按字典序吐出对应的IMeasurementSchema及其对应的ChunkMetadata列表,每批个数为1000个普通MeasurementSchema或超过1000个sensor的最小的完整的VectorMeasurementSchema列表)(这里需要改变底层结构提高性能)Iterator(ChunkMetadataListIterator每次按字典序吐出对应的IMeasurementSchema及其对应的ChunkMetadata列表,每批个数为256个普通MeasurementSchema或超过256个sensor的最小的完整的VectorMeasurementSchema列表)(这里需要改变底层结构提高性能)
    • 循环遍历所有ChunkMetadataListIterator直到没有任何一个ChunkMetadataListIterator还有数据
      • 对ChunkMetadataListIterator吐出的数据做归并排序
          对ChunkMetadataListIterator吐出的数据做归并排序,对于合并出来的每一个IMeasurementSchema及其对应的ChunkMetadata列表
          • 对于合并出来的每一个IMeasurementSchema及其对应的ChunkMetadata列表
          • 如果是乱序空间的文件合并,采取deserialize合并
            • 通过各自文件的IChunkReader有序把数据读出并整理出对应的time-value列表
              • 如果是MeasurementSchema,使用ChunkReader
              • 如果是VectorMeasurementSchema,使用VectorChunkReader
            • 遍历上述的time-value列表,将数据写入新的IChunkWriter
              • 如果是MeasurementSchema,使用ChunkWriterImpl
              • 如果是VectorMeasurementSchema,使用VectorChunkWriterImpl
            • 判断限流
            • 将IChunkWriter写入新文件
          •  如果是顺序空间的文件合并
            • 如果page足够大,采取append合并
              •  通过各自文件的reader有序把chunk读出来,并通过合并ByteBuffer和统计信息的方式不解析chunk数据点、而有序合并出对应的新ChunkChunkMetadata
                • 如果是MeasurementSchema,仅需要前一个chunk和后一个chunk进行合并
                • 如果是VectorMeasurementSchema,需要前一个VectorChunkMetadata对应的所有timeChunk和valueChunk与后一个所有的timeChunk和valueChunk合并
              • 判断限流
              • 将合并完的ChunkChunkMetadata写入新文件
            • 如果page不足够大,采取deserialize合并
              • 通过各自文件的IChunkReader有序把数据读出并整理出对应的time-value列表
                • 如果是MeasurementSchema,使用ChunkReader
                • 如果是VectorMeasurementSchema,使用VectorChunkReader
              • 遍历上述的time-value列表,将数据写入新的IChunkWriter
                • 如果是MeasurementSchema,使用ChunkWriterImpl
                • 如果是VectorMeasurementSchema,使用VectorChunkWriterImpl
              • 判断限流
              • 将IChunkWriter写入新文件
      • 关闭reader cache中所有的reader
      • 序列化新文件
      • 关闭新文件writer

    ...