写入

先写入内存,之后在flush到磁盘

Writer节点中Cp之前Flush到磁盘或者内存满了,返回元数据,用于发往下游

生成L0层的sort run,L0层每个文件一个sortrun,大于level0层一层一个sortrun,sortrun之间没有overlap重叠

合并

  1. Flush到磁盘前尝试压缩 cp 之前,或者内存满了
  2. 根据compaction strategy 找出要compact的sortrun

    1. fullcompaction

      1. 所有sortrun参与compaction
      2. 触发条件:changlogproducer:fullcompaction、批模式执行、相关配置、size放大
    2. universalCompaction

      • space 放大触发full-compaction
      • 由individual Size ratio触发minor compaction.Size(R2) / Size(R1) <= IndividualSizeRatio时,r1 r2都执行压缩,目的sr尽可能对齐。
      • num-sort-run.compaction-trogger触发minor compaction
    3. ForceUplevel0Compaction:

      • mergeEngine=first-row或changlogproducer=lookup或delevectors=true
      • compaction时强制把L0层所有文件进行rewrite(需要产生changlog,或者delevectors所以需要压缩L0层)
  3. 封装一个MergeTreeCompactTask(callable 返回compactResult)封装一个扔到线程池去执行(运行时上报metrics)
  4. 执行compactRewriter,并且按需生成changlog,生成delevectors(产出changlog会调用mergefunction对数据进行合并例如agg、firstrow、pu表等)

    1. 读数据时多路归并排序算法对应pip2
    2. changlogproducer=lookup|fullcompaction或delevectors=true 产出changlog

标签: none

评论已关闭