THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
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合并算法
- 对于待合并列表中的每一个 sensor
- 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)
...