Versions Compared

Key

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

...

层级合并(在顺序空间或乱序空间内部执行)

不存在对齐时间序列时的层级合并流程

  • 根据 seq_file_num_in_each_level / unseq_file_num_in_each_level 获取此次待合并层级中的 TsFileResource,作为待合并文件列表
  • 对待合并文件列表中的每个文件,创建一个 TsFIleSequenceReader,并存在 ReaderCache 中,并获取该文件的设备列表,生成所有的 device 集合
  • 根据待合并文件列表,依次使用每个文件的TsFileSequenceReader,获取该文件的设备列表,生成所有的device集合
  • 创建 TsFIleSequenceReader 缓存 ReaderCache
  • 遍历device集合
    • 根据 ReaderCache 得到相应的得到相应的 TsFileSequenceReader
    • 根据device读取各个文件对应的根据 device 读取各个文件对应的 ChunkMetadataListIterator(ChunkMetadataListIterator每次按字典序吐出 max_degree_of_index_node 个sensor及其对应的ChunkMetadata列表)个 sensor 及其对应的 ChunkMetadata 列表)
    • 遍历 算法1 遍历算法1输出的每批待合并的 sensor 列表
      • 对于待合并列表中的每一个 sensor对于待合并列表中的每一个sensor
        • 如果是乱序空间的文件合并,采取 反序列化Page合并算法
        • 如果是顺序空间的文件合并
          • 如果某个 Chunk 的数据点数小于 merge_page_point_number,采取 反序列化Page合并算法
          • 否则,采取 追加Page合并算法
    • 关闭 ReaderCache 中所有的中所有的 reader
    • 序列化新文件的 TsFileResource
    • 关闭新文件关闭新文件 writer


算法1

输入:多个文件的 ChunkMetadataListIterator,Iterator 每次输出的 List 内的 sensor 个数为 max_index_degree(假设有3个文件:file1:(s1,s2)(s3,s4)   file2:(s1, s3)  file3:(s3,s4)

...

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


存在对齐时间序列时的层级合并流程

  • 根据 seq_file_num_in_each_level / unseq_file_num_in_each_level 获取此次待合并层级中的 TsFileResource,作为待合并文件列表
  • 对待合并文件列表中的每个文件,创建一个 TsFIleSequenceReader,并存在 ReaderCache 中,并获取该文件的设备列表,生成所有的 device 集合
  • 根据待合并文件列表,依次使用每个文件的TsFileSequenceReader,获取该文件的设备列表,生成所有的device集合
  • 创建 TsFIleSequenceReader 缓存 ReaderCache
  • 遍历device集合
    • 根据 ReaderCache 得到相应的TsFileSequenceReader
    • 根据 device 读取各个文件对应的ChunkMetadataListIterator
    • 循环算法2输出的待合并的 IMeasurementSchema 列表
      • 对于待合并的 IMeasurementSchema 
      • 如果是乱序的文件合并,采取 存在对齐时间序列的反序列化 Page 合并算法
      • 如果是顺序空间的文件合并
        • 如果某个 Chunk(如果是对齐时间序列,判断 TimeChunk) 的数据点数小于 merge_page_point_number,采取 存在对齐时间序列的反序列化 Page 合并算法
        • 如果page足够大,采取 存在对齐时间序列的追加 Page 合并算法
    • 关闭 ReaderCache 中所有的reader
    • 序列化新文件的 TsFileResource
    • 关闭新文件writer

...