Versions Compared

Key

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

...

  • 根据待合并文件列表,依次使用每个文件的TsFileSequenceReader,获取该文件的设备列表,生成所有的device集合
  • 遍历device集合
    • 根据文件从文件读取器cache中得到相应的TsFileSequenceReader
    • 根据device读取各个文件对应的ChunkMetadataListIterator(ChunkMetadataListIterator每次按字典序吐出 metadata_index_degree 个sensor及其对应的ChunkMetadata列表)
    • 遍历算法1输出的每批待合并的sensor列表
      • 对于待合并列表中的每一个sensor
        • 如果是乱序空间的文件合并,采取 反序列化Page合并算法
        •  如果是顺序空间的文件合并
          • 如果某个 Chunk 的数据点数小于 merge_page_point_number,采取 反序列化Page合并算法
          • 如果page足够大,采取 追加Page合并算法
    • 关闭reader cache中所有的reader
    • 序列化新文件的 TsFileResource
    • 关闭新文件writer


算法1

输入:多个文件的 ChunkMetadataListIterator(假设有3个文件:file1:(s1,s2)(s3,s4)   file2:(s1, s3)  file3:(s3,s4)

...

第三轮:file1(s4)+file3(s4) → (s4)


反序列化Page合并算法

  • 通过各自文件的reader有序把数据读出并整理出对应的time-value列表
  • 遍历上述的time-value列表,将数据写入新的ChunkWriter
  • 判断限流
  • ChunkWriter写入新文件


追加Page合并算法

  •  通过各自文件的reader有序把chunk读出来,并通过合并ByteBuffer和统计信息的方式不解析chunk数据点、而有序合并出对应的新ChunkChunkMetadata
  • 判断限流
  • 将合并完的ChunkChunkMetadata写入新文件

...