Calcite CBO ② - VolcanoPlanner 之 IterativeRuleDriver

一、IterativeRuleQueue

该算法不断的从 RuleQueue 中取出 Rule 并执行,该过程有两个退出条件:

  1. RuleQueue 空了:没有 Rule 需要执行了
  2. 超时:在规则执行时抛出 VolcanoTimeoutException 异常,当 VolcanoPlanner 的 cancelFlag 设置为 true 时会抛出这个异常,所以在使用如果觉得优化时间太长,超过一定时间可设置cancleFlag 为 true 强制优化结束

IterativeRuleQueue 主要成员变量:

  • final MatchList matchList

其中 MatchList 如下

二、MatchList

class MatchList {

  /**
   * 只能放 SubstitutionRule 对应的 RuleMatch
   * 为了能区分出来以优先执行 SubstitutionRules
   */
  private final Queue<VolcanoRuleMatch> preQueue = new ArrayDeque<>();

  // 新的非替换规则对应的 RuleMatch 被追加到这个队列的末尾
  // 先进先出,不以任何方式排序。
  private final Queue<VolcanoRuleMatch> queue = new ArrayDeque<>();

  /**
   * Multi-map of RelSubset to VolcanoRuleMatches.
   */
  // multimap 容器保存的是有序的键/值对,但它可以保存重复的元素
  // multimap 中会出现具有相同键的元素序列,它们会被添加到容器
  final Multimap<RelSubset, VolcanoRuleMatch> matchMap =
      HashMultimap.create();

  // 优先把替换规则对应的 RuleMatch 拿出来
  @Nullable VolcanoRuleMatch poll() {
    VolcanoRuleMatch match = preQueue.poll();
    if (match == null) {
      match = queue.poll();
    }
    return match;
  }

  void offer(VolcanoRuleMatch match) {
    if (match.getRule() instanceof SubstitutionRule) {
      preQueue.offer(match);
    } else {
      queue.offer(match);
    }
  }

}

可以看到 matchList 如下,(如之前 setRoot 中所述)越底下的节点的 class 对应的 RuleMatch 在 matchList 中越前面

三、IterativeRuleDriver#drive() 核心流程

注①:什么情况下 rel 会被剪枝?

注②propagateCostImprovements(rel) 是按需递归更新 parents 的 cost,比如 rel 的 bestCost 发生变化导致爸爸的 bestCost 发生变化,则会进一步更新爷爷的;如果没有导致爸爸的 bestCost 变化,则不会去更新爸爸的和爷爷的 cost

最终的到这样一个 RelSet Tree:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、问题 & 目标 数据库/大数据引擎主要由三部分组成,分别是解析器、优化器和执行引擎,如下图所示: 其中,优化器...
    牛肉圆粉不加葱阅读 449评论 0 1
  • 全书完整目录请见:Odoo 12开发者指南(Cookbook)第三版 本章中我们将讲解如下小节: 定义模型表现及顺...
    AlanHou阅读 1,499评论 0 0
  • 一、多线程 说明下线程的状态 java中的线程一共有 5 种状态。 NEW:这种情况指的是,通过 New 关键字创...
    Java旅行者阅读 4,872评论 0 44
  • 1、离职多久了 2、大约多久到岗 3、离这里多远 4、会考虑搬家吗 5、公司会加班 6、为什么要离职 7、你们这个...
    临渊鲸落阅读 1,401评论 0 1
  • 1.一些开放性题目 1.自我介绍:除了基本个人信息以外,面试官更想听的是你与众不同的地方和你的优势。 2.项目介绍...
    55lover阅读 715评论 0 6

友情链接更多精彩内容