当前位置: 首页 > wzjs >正文

做团购网站有什么难处2022重大时政热点事件简短

做团购网站有什么难处,2022重大时政热点事件简短,济南做平台网站的,网站建设2018背景 本文基于 Starrocks 3.3.5 本文主要来探索一下Starrocks在FE端怎么实现 短路径,从而加速点查查询速度。 在用户层级需要设置 enable_short_circuit 为true 分析 数据流: 直接到StatementPlanner.createQueryPlan方法: ... OptExpres…

背景

本文基于 Starrocks 3.3.5
本文主要来探索一下Starrocks在FE端怎么实现 短路径,从而加速点查查询速度。
在用户层级需要设置 enable_short_circuit 为true

分析

数据流:
直接到StatementPlanner.createQueryPlan方法:

...
OptExpression root = ShortCircuitPlanner.checkSupportShortCircuitRead(logicalPlan.getRoot(), session);
...
optimizedPlan = optimizer.optimize(session,root,mvTransformerContext,stmt,new PhysicalPropertySet(),new ColumnRefSet(logicalPlan.getOutputColumn()),columnRefFactory);

首先是通过ShortCircuitPlanner.checkSupportShortCircuitRead来判断该SQL是不是支持短路径查询:

 public static OptExpression checkSupportShortCircuitRead(OptExpression root, ConnectContext connectContext) {if (!connectContext.getSessionVariable().isEnableShortCircuit()) {root.setShortCircuit(false);return root;}boolean supportShortCircuit = root.getOp().accept(new LogicalPlanChecker(), root, null);if (supportShortCircuit && OperatorType.LOGICAL_LIMIT.equals(root.getOp().getOpType())) {root = root.getInputs().get(0);}root.setShortCircuit(supportShortCircuit);return root;}
  • 通过isEnableShortCircuit也就是enable_short_circuit(默认是false) 来判断是否支持短路径查询
  • 通过visitor LogicalPlanChecker来判断SQL本身是否支持短路径查询
    通过 LogicalPlanChecker 实现看到,目前只支持 Scan Project Filter Limit 操作:
     public static class LogicalPlanChecker extends BaseLogicalPlanChecker {...@Overridepublic Boolean visitLogicalFilter(OptExpression optExpression, Void context) {...return visitChild(optExpression, context);}@Overridepublic Boolean visitLogicalProject(OptExpression optExpression, Void context) {...return visitChild(optExpression, context);}@Overridepublic Boolean visitLogicalLimit(OptExpression optExpression, Void context) {...return visitChild(optExpression, context);}@Overridepublic Boolean visitLogicalTableScan(OptExpression optExpression, Void context) {return createLogicalPlanChecker(optExpression, allowFilter, allowLimit, allowProject,allowSort, predicate, orderByColumns, limit).visitLogicalTableScan(optExpression, context);}protected static boolean isPointScan(Table table,List<String> keyColumns,List<ScalarOperator> conjuncts,ShortCircuitContext shortCircuitContext) {Map<String, PartitionColumnFilter> filters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);filters.putAll(ColumnFilterConverter.convertColumnFilter(conjuncts, table));if (keyColumns == null || keyColumns.isEmpty()) {return false;}long cardinality = 1;for (String keyColumn : keyColumns) {if (filters.containsKey(keyColumn)) {PartitionColumnFilter filter = filters.get(keyColumn);if (filter.getInPredicateLiterals() != null) {cardinality *= filter.getInPredicateLiterals().size();// TODO(limit operator place fe)if (cardinality > MAX_RETURN_ROWS ||(shortCircuitContext.getMaxReturnRows() != 0 && cardinality != 1)) {return false;}} else if (!filter.isPoint()) {return false;}} else {return false;}}return true;}}}
    
    • 直接看visitLogicalTableScan这个方法
      只有是存算一体的,也就是LogicalOlapScanOperator实例,才会有短路径查询,最终会走到ShortCircuitPlannerHybrid.LogicalPlanChecker.visitLogicalTableScan方法
      public Boolean visitLogicalTableScan(OptExpression optExpression, Void context) {LogicalScanOperator scanOp = optExpression.getOp().cast();Table table = scanOp.getTable();if (!(table instanceof OlapTable) || !(KeysType.PRIMARY_KEYS.equals(((OlapTable) table).getKeysType()))) {return false;}for (Column column : table.getFullSchema()) {if (IDictManager.getInstance().hasGlobalDict(table.getId(), column.getColumnId())) {return false;}}List<String> keyColumns = ((OlapTable) table).getKeyColumns().stream().map(Column::getName).collect(Collectors.toList());List<ScalarOperator> conjuncts = Utils.extractConjuncts(predicate);return isPointScan(table, keyColumns, conjuncts, shortCircuitContext);}
      
      • 首先必须满足 是主键模型
      • 再次是 必须满足SQL 查询的表和字段没有全局字典
      • 最后 判断是不是点查
        满足:1. 过滤条件要么是IN,要么是=
        2. 如果是IN的话,IN中的项不能超过2024个
        3. 必须包含所有的主键(可以额外包含其他的非主键)
  • 如果确定可以走短路径的话,则设置root.setShortCircuit(true),否则为false

再次进行计划级别的优化 optimizer.optimize:
这里会调用optimizeByCost方法,到调用 rewriteAndValidatePlan方法:

 private OptExpression rewriteAndValidatePlan(OptExpression tree,TaskContext rootTaskContext) {OptExpression result = logicalRuleRewrite(tree, rootTaskContext);OptExpressionValidator validator = new OptExpressionValidator();validator.validate(result);// skip memoif (result.getShortCircuit()) {result = new OlapScanImplementationRule().transform(result, null).get(0);result.setShortCircuit(true);}return result;}

ShortCircuit 短路径涉及到的有两方面:

  1. logicalRuleRewrite中 ruleRewriteForShortCircuit
        private Optional<OptExpression> ruleRewriteForShortCircuit(OptExpression tree, TaskContext rootTaskContext) {Boolean isShortCircuit = tree.getShortCircuit();if (isShortCircuit) {deriveLogicalProperty(tree);ruleRewriteIterative(tree, rootTaskContext, RuleSetType.SHORT_CIRCUIT_SET);ruleRewriteOnlyOnce(tree, rootTaskContext, new MergeProjectWithChildRule());OptExpression result = tree.getInputs().get(0);result.setShortCircuit(true);return Optional.of(result);}return Optional.empty();}
    

这里会专门针对于shortCircuit做一些规则优化:

new PruneTrueFilterRule(),
new PushDownPredicateProjectRule(),
PushDownPredicateScanRule.OLAP_SCAN,
new CastToEmptyRule(),
new PruneProjectColumnsRule(),
PruneScanColumnRule.OLAP_SCAN,
new PruneProjectEmptyRule(),
new MergeTwoProjectRule(),
new PruneProjectRule(),
new PartitionPruneRule(),
new DistributionPruneRule();
 new MergeProjectWithChildRule()

以上规则只是在project以及 常量优化,以及更好的过滤数据的层级进行了优化,免去了一般性的规则过滤. 正如primary_key_table所说,由于primary key模型使得谓词下推成为了可能。

  1. OlapScanImplementationRule().transform
    这个也是在该SQL能够进行短路径的情况下,才会走到的数据流
    这一步的作用主要是把逻辑的scan转换为物理的scan

经过了以上两步以后,就直接返回了,也不会进入到memo的CBO优化。
至此 FE端 短路径的 优化就结束了,接下来就是生成物理计划了。

http://www.dtcms.com/wzjs/502481.html

相关文章:

  • 做物流的网站网络营销的职能是什么
  • 动态网站开发最新技术长沙整合推广
  • 做网站比较便宜博客营销案例
  • 阿里云oss做网站微信推广引流加精准客户
  • 手机网站怎么在电脑上打开网站关键词优化排名
  • 苏州网站建设营销站长统计网站
  • 企业内部网站源码黑帽seo培训网
  • seo建网站惠州百度推广优化排名
  • 建站系统破解微信营销的方法7种
  • wordpress内核源码分析深圳网络推广seo软件
  • 网站开发tt0546百度关键词搜索广告的优缺点
  • 网站建设与管理方案书广州seo网站排名
  • 商务网站开发课程体会湖南网络推广服务
  • 洛卡博网站谁做的百度网
  • 网页制作软件visualseo建设者
  • 民宿设计公司山东seo推广
  • 怎么建设国外网站全网投放广告的渠道有哪些
  • 威海市做网站的百度识图网站
  • 清远网站开发sohu网络营销策划书范文
  • 公司做网站之前要准备什么百度网站大全
  • 朝阳区办公深圳百度搜索排名优化
  • 网站打不开原因检测关键词排名优化易下拉软件
  • 网站建设7个基本流程分析app拉新项目一手渠道商
  • 顺德网站建设公司网络公司排行榜
  • 怎样在公司的网站服务器上更新网站内容渠道策略的四种方式
  • php做音乐网站网站优化是什么意思
  • 房地产网站开发百度云网盘网页版
  • 网站制作什么做小程序制作一个需要多少钱
  • 点个赞科技 网站制作东莞发布最新通告
  • 最超值的网站建设aso关键词覆盖优化