Versions Compared

Key

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

...

  1. 重要属性
    1. sequenceFileResources:顺序文件链表,存放着该虚拟存储组下的该时间分区下的所有顺序文件。
    2. unsequenceFileResources:乱序文件链表,存放着该虚拟存储组下的该时间分区下的所有乱序文件。
    3. taskFactory:任务工厂,负责为每批待合并的TsFile创建一个合并任务

 

...

  1. 主要流程
    • 从虚拟存储组下该时间分区里的所有顺序和乱序文件中,选取“候选文件”:
      • 候选顺序文件:过滤掉isNotExistisDeleteisOverTTL的文件。
      • 候选乱序文件:从第一个文件开始
        • 若遇到isNotExist || isDelete || isOverTTL 的则跳过
        • 若遇到 isCompacting || isCompactionCandidate || isNotClosed 则返回
        • 否则添加到候选乱序文件中
    • 在指定的时间内(30s)选取“源文件”,即从候选文件中选取与乱序文件有重叠的顺序文件:
      • 遍历乱序文件,寻找与该乱序文件有重叠的所有顺序文件:(使用loose评估内存)
        • 若顺序文件中不存在isCompactingisCompactionCandidate的,则检查并用评估它们在合并中的内存开销是否超过阈值,若否,则将该批乱序和对应的顺序文件放入源文件中
        • 若顺序文件中存在一个及以上isCompactingisCompactionCandidate的,则丢弃该乱序和对应的顺序文件,并停止选取源文件。
      • 若选取的乱序文件数量为0,则使用tight评估重新选取源文件
    • 若源顺序文件或者源乱序文件列表中有一个为0,则放弃此合并任务。否则对所有的源文件set isCompactionCandidatetrue,并把该任务丢进等待队列里。

 

RewriteCrossSpaceCompactionSelector选择器

  1. 重要方法

1)selectAndSubmit():返回是否找到文件并提交合并任务

...

文件选择器ICrossSpaceMergeFileSelector

...

RewriteCompactionFileSelector

下面详细介绍选择待合并文件的方法:

  1.   select()方法:返回的数组里第一个元素是待合并的顺序文件列表,第二个元素是待合并的乱序文件列表

...

具体流程:将与该unseqFile乱序文件有Overlap的并且还未被此次合并任务文件选择器选中的顺序文件的索引放入tmpSelectedSeqFiles列表里。具体判断是否有Overlap的做法是:依次遍历获取乱序文件的每个设备ChunkGroup,判断所有还未被此次合并任务选中的顺序文件的该设备ChunkGroup是否有与乱序的ChunkGroup重叠,有的话则选中此顺序文件。

 

...


合并任务的恢复

IOTDB-Server重启后,每个StorageGroup会执行顺序空间和乱序空间内的合并恢复和跨空间的合并恢复。

...