Versions Compared

Key

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

Table of Contents

...


空间内合并执行流程(针对一元时间序列)

顺序空间:顺序数据文件所在的空间

乱序空间:乱序数据文件所在的空间

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

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

输入:待合并文件列表 TsFileList

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



算法1算法1:

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

...