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

wordpress建站后台wordpress 广告 能赚多少

wordpress建站后台,wordpress 广告 能赚多少,网站原型图怎么做,学校文化建设网站背景 写这个文章的原因是为了了解一下Starrocks对各个算子的代价是怎么计算的,以便在后续对Starrocks做优化的时候,能够起到辅助作用 本文基于 Starrocks 3.3.5 结论 StatisticsCalculator 通过获取底层数据源的统计信息而进行自上而下的数据信息的统…

背景

写这个文章的原因是为了了解一下Starrocks对各个算子的代价是怎么计算的,以便在后续对Starrocks做优化的时候,能够起到辅助作用
本文基于 Starrocks 3.3.5

结论

StatisticsCalculator 通过获取底层数据源的统计信息而进行自上而下的数据信息的统计,这些统计信息的计算大部分也是估算获得的。

分析

直接到 StatisticsCalculator 类中(该类会被DeriveStatsTask调用),这个类采用的典型的Visitor模式,对于不同的算子,会进入到不同的方法中去:
这里我们分析三种算子:

1. Scan olap
2. Filter
3. Projection

其他的算子可以看源码实现。

  1. Scan olap算子
   @Overridepublic Void visitLogicalOlapScan(LogicalOlapScanOperator node, ExpressionContext context) {return computeOlapScanNode(node, context, node.getTable(), node.getSelectedPartitionId(),node.getColRefToColumnMetaMap());}@Overridepublic Void visitPhysicalOlapScan(PhysicalOlapScanOperator node, ExpressionContext context) {return computeOlapScanNode(node, context, node.getTable(), node.getSelectedPartitionId(),node.getColRefToColumnMetaMap());}private Void computeOlapScanNode(Operator node, ExpressionContext context, Table table,Collection<Long> selectedPartitionIds,Map<ColumnRefOperator, Column> colRefToColumnMetaMap) {Preconditions.checkState(context.arity() == 0);// 1. get table row countlong tableRowCount = StatisticsCalcUtils.getTableRowCount(table, node, optimizerContext);// 2. get required columns statisticsStatistics.Builder builder = StatisticsCalcUtils.estimateScanColumns(table, colRefToColumnMetaMap, optimizerContext);if (tableRowCount <= 1) {builder.setTableRowCountMayInaccurate(true);}// 3. deal with column statistics for partition pruneOlapTable olapTable = (OlapTable) table;adjustPartitionColsStatistic(selectedPartitionIds, olapTable, builder, colRefToColumnMetaMap);builder.setOutputRowCount(tableRowCount);if (isRewrittenMvGE(node, table, context)) {adjustNestedMvStatistics(context.getGroupExpression().getGroup(), (MaterializedView) olapTable, builder);if (node.getProjection() != null) {builder.setShadowColumns(node.getProjection().getOutputColumns());}}// 4. estimate cardinalitycontext.setStatistics(builder.build());return visitOperator(node, context);}

这个也是统计信息的来源,其他算子的统计信息都是基于此类算子计算出来的。

  • StatisticsCalcUtils.getTableRowCount 首先计算行数
    该方法会首先获取到扫描的分区数,之后再从CachedStatisticStorage获取到对应分区的行数信息,从而累加,最小为1行
  • StatisticsCalcUtils.estimateScanColumns 获取到对应列的统计信息
    该方法也是从CachedStatisticStorage 获取ColumnStatisticsHistogramStatistics信息
  • 如果行数只有一行,那就标记为统计信息不准确
  • 调增分区列的统计信息
  • visitOperator 这里会对scan涉及到的谓词以及 limit projection 做进一步的统计分析
    对于不同的谓词,利用 BaseCalculatingVisitor / LargeOrCalculatingVisitor 进行统计,比如说 in / or / and等
    对于projection 利用 ExpressionStatisticVisitor类进行统计
  1. Filter算子
    @Overridepublic Void visitLogicalFilter(LogicalFilterOperator node, ExpressionContext context) {return computeFilterNode(node, context);}@Overridepublic Void visitPhysicalFilter(PhysicalFilterOperator node, ExpressionContext context) {return computeFilterNode(node, context);}private Void computeFilterNode(Operator node, ExpressionContext context) {Statistics inputStatistics = context.getChildStatistics(0);Statistics.Builder builder = Statistics.builder();builder.addColumnStatistics(inputStatistics.getColumnStatistics());builder.setOutputRowCount(inputStatistics.getOutputRowCount());context.setStatistics(builder.build());return visitOperator(node, context);}
  • 对于filter操作来说 ,也是沿用了子节点的统计信息,所以说filter这一层级统计信息和子节点是一致的
  1. Projection算子
@Overridepublic Void visitLogicalProject(LogicalProjectOperator node, ExpressionContext context) {return computeProjectNode(context, node.getColumnRefMap());}@Overridepublic Void visitPhysicalProject(PhysicalProjectOperator node, ExpressionContext context) {return computeProjectNode(context, node.getColumnRefMap());}private Void computeProjectNode(ExpressionContext context, Map<ColumnRefOperator, ScalarOperator> columnRefMap) {Preconditions.checkState(context.arity() == 1);Statistics.Builder builder = Statistics.builder();Statistics inputStatistics = context.getChildStatistics(0);builder.setOutputRowCount(inputStatistics.getOutputRowCount());Statistics.Builder allBuilder = Statistics.builder();allBuilder.setOutputRowCount(inputStatistics.getOutputRowCount());allBuilder.addColumnStatistics(inputStatistics.getColumnStatistics());for (ColumnRefOperator requiredColumnRefOperator : columnRefMap.keySet()) {ScalarOperator mapOperator = columnRefMap.get(requiredColumnRefOperator);if (mapOperator instanceof SubfieldOperator && context.getOptExpression() != null) {Operator child = context.getOptExpression().inputAt(0).getOp();if (child instanceof LogicalScanOperator || child instanceof PhysicalScanOperator) {addSubFiledStatistics(child, ImmutableMap.of(requiredColumnRefOperator,(SubfieldOperator) mapOperator), builder);continue;}}ColumnStatistic outputStatistic =ExpressionStatisticCalculator.calculate(mapOperator, allBuilder.build());builder.addColumnStatistic(requiredColumnRefOperator, outputStatistic);allBuilder.addColumnStatistic(requiredColumnRefOperator, outputStatistic);}context.setStatistics(builder.build());return visitOperator(context.getOp(), context);}

对于Projection来说,也是根据不同的 Projection 算子来做区别对待的(也是用ExpressionStatisticVisitor类),如case when操作,函数操作等,这些对应的列的最大值和最小值都是不一样的

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

相关文章:

  • 网站建设目录结构苏州美丽乡村建设网站
  • 做网站的哪个好现在比较好的营销平台
  • 商丘企业网站服务电子商务网站 功能
  • app软件开发就是网站开发吗企业seo价格查询价格
  • 早教中心网站建设方案wordpress打包主题
  • 建设部网站 绿色建筑评价表北京网站开发网络公司
  • 济南高新区 网站建设wordpress搜索间隔时间
  • 驻马店广告制作公司青岛优化网站技术
  • 做的网站上传到服务器万户网络官网
  • 郑州网站竞价托管北京网络科技公司简介
  • 哪个网站可以做身份核验室内设计学校培训的
  • 电脑版网站转手机版怎么做百度优化推广
  • 衣柜 技术支持 东莞网站建设ds2600ii色带
  • 个人网站备案 名称怎样让网站显示网站建设中
  • 网站界面设计中的版式设计有哪些会员可见的网站开发
  • 优化型网站建设怎么做好一个网站
  • 优秀手机网站欣赏烟台网络推广公司
  • 北京华夏建设有限公司网站贵阳公司官方网站建设
  • mvc3网站上传到空间杭州旺道企业服务有限公司
  • 学习前端开发的网站列车营销网站怎么做
  • 宝应网站wordpress关键词在哪里
  • 网站编辑电子商务网站运营专员常州哪些网站公司做的好处
  • 2022年一建考试最新消息福州关键词seo
  • 主流网站开发语言徐州市建设工程招标网
  • 长沙优化网站多少钱天津建设工程信息网官方
  • 网站建设的简历范文设计师用什么软件
  • 最好的网站制作公司设计作品网站有哪些
  • 网站建设的 几点建材公司网站建设方案
  • 网站打开慢什么原因呢asp.net mvc 网站开发之美
  • 云南网站搭建搜索引擎推广公司