zoukankan      html  css  js  c++  java
  • Catalyst揭秘 Day5 optimizer解析

    Catalyst揭秘 Day5

    optimizer解析

    Optimizer是目前为止中catalyst中最重要的部分。主要作用是把analyzed logicalPlan变成optimized LogicalPlan。optimizer和analyzer都继承自RuleExecutor。所以表现形式上都差不多。在analyzer基础上理解起来会比较简单。

    总体分析

    Optimizer类似analyzer,里面有一系列的batches,里面包含了一系列的rules,每个rule都有个迭代次数。为什么有迭代次数呢,因为优化是不断的执行某一过程来改善行为,几乎所有复杂点的程序都会有这样的机制。
    Snip20160724_162

    Optimizer是怎么进行优化的,有两个级别,分为有算子和表达式级别的优化。因为作用对象是TreeNode,我们可以看到TreeNode有两个子类,QueryPlan和Expression。
    Snip20160724_163

    而在TreeNode中提供了一系列的树遍历方法,最重要的是transform方法。会把规则运用到所有的子节点,同时,我们从注释可以看到,在操作时不会修改原来的树,只会变成新的树。
    Snip20160724_165

    规则分析

    当然,Optimizer最关键的还是rules的处理。我们简单看下。

    Snip20160724_167

    1. 四个Push规则,会进行条件下推,更早的过滤掉不需要的元素。
    2. ColumnPrunning,列裁剪,直接选出想要的列,提前消除掉不需要的属性。
    3. CombineFilters、CombineLimits,把多个条件合并为一个条件,减少操作次数。

    从总体优化思路看,该合并的合并,该裁剪的裁剪,该简化的进行进化。这块处理是catalyst的精华,现在了解的还比较初步,后面会结合实例,再深入分析下。

    欲知后事如何,且听下回分解!

    DT大数据每天晚上20:00YY频道现场授课频道68917580

  • 相关阅读:
    GDAL GDALOpen 打开中文路径的问题
    (转载)星载SAR产品数据格式的介绍
    Qt 标题栏(标题、图标)设置
    android NDK与Cygwin配置
    从零开始系统深入学习android(实践让我们开始写代码Android框架学习7.通知)
    使用的Eclipise插件汇总
    android对话框弹出方式动画
    常用系统优化软件下载
    FLV 观看方法和视频文件转换攻略
    网络编辑如何应用SEO知识
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5700717.html
Copyright © 2011-2022 走看看