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

MATLAB 做网站公司网站建设需要注意什么

MATLAB 做网站,公司网站建设需要注意什么,网站建设的大公司,河南安阳市房价DuckDB核心模块揭秘 | 第1期 | 向量化执行引擎之Pipeline DuckDB是一款非常火的OLAP嵌入式数据库,性能超级棒。它分为多个组件:解析器、逻辑规划器、优化器、物理规划器、执行器以及事务和存储管理层。其中解析器原语PgSQL的解析器;逻辑规划器…

DuckDB核心模块揭秘 | 第1期 | 向量化执行引擎之Pipeline

DuckDB是一款非常火的OLAP嵌入式数据库,性能超级棒。它分为多个组件:解析器、逻辑规划器、优化器、物理规划器、执行器以及事务和存储管理层。其中解析器原语PgSQL的解析器;逻辑规划器包含binder、plan generator,前者解析所有引用的schema中的对象的表达式,将其与列名和类型匹配,后者将binder生成的AST转换成由基本逻辑查询运算符组成的树;优化器产生优化的查询计划;物理规划器将优化的查询计划转换成物理执行计划,即PhysicalOperator树。它的高性能主要得益于它的push-based pipeline向量化执行引擎。本文介绍下它的向量化引擎pipeline生成原理。

1、物理执行计划长什么样?有哪些算子?

physical_plan_generator.cpp中CreatePlan函数将逻辑计划节点转换成物理计划节点,即PhysicalOperator。有哪些算子类型呢?PhysicalOperatorType:

//===--------------------------------------------------------------------===//
// Physical Operator Types
//===--------------------------------------------------------------------===//
enum class PhysicalOperatorType : uint8_t {INVALID,ORDER_BY,LIMIT,STREAMING_LIMIT,LIMIT_PERCENT,TOP_N,WINDOW,UNNEST,UNGROUPED_AGGREGATE,HASH_GROUP_BY,PERFECT_HASH_GROUP_BY,FILTER,PROJECTION,COPY_TO_FILE,BATCH_COPY_TO_FILE,FIXED_BATCH_COPY_TO_FILE,RESERVOIR_SAMPLE,STREAMING_SAMPLE,STREAMING_WINDOW,PIVOT,// -----------------------------// Scans// -----------------------------TABLE_SCAN,DUMMY_SCAN,COLUMN_DATA_SCAN,CHUNK_SCAN,RECURSIVE_CTE_SCAN,CTE_SCAN,DELIM_SCAN,EXPRESSION_SCAN,POSITIONAL_SCAN,// -----------------------------// Joins// -----------------------------BLOCKWISE_NL_JOIN,NESTED_LOOP_JOIN,HASH_JOIN,CROSS_PRODUCT,PIECEWISE_MERGE_JOIN,IE_JOIN,DELIM_JOIN,INDEX_JOIN,POSITIONAL_JOIN,ASOF_JOIN,// -----------------------------// SetOps// -----------------------------UNION,RECURSIVE_CTE,CTE,// -----------------------------// Updates// -----------------------------INSERT,BATCH_INSERT,DELETE_OPERATOR,UPDATE,// -----------------------------// Schema// -----------------------------CREATE_TABLE,CREATE_TABLE_AS,BATCH_CREATE_TABLE_AS,CREATE_INDEX,ALTER,CREATE_SEQUENCE,CREATE_VIEW,CREATE_SCHEMA,CREATE_MACRO,DROP,PRAGMA,TRANSACTION,CREATE_TYPE,ATTACH,DETACH,// -----------------------------// Helpers// -----------------------------EXPLAIN,EXPLAIN_ANALYZE,EMPTY_RESULT,EXECUTE,PREPARE,VACUUM,EXPORT,SET,LOAD,INOUT_FUNCTION,RESULT_COLLECTOR,RESET,EXTENSION
};

让我们看一个简单inner join的例子:物理执行计划最上头是投影算子PROJECTION,然后其左子树是HASH_JOIN算子,HASH_JOIN两个子算子分别为两个顺序扫描SEQ_SCAN:

3ea7f7628e6e5e4e0f3df6c00126b2e6.png

基于物理执行计划构建出pipeline,真正执行的是pipeline。

2、物理执行计划如何构建pipeline?

2.1什么是MetaPipeline

MetaPipeline 表示一组都具有相同Sink的Pipeline。Source为输入,Sink为输出,Other Node就是其他节点,将一个物理执行计划树转换成多个pipeline。一个pipeline包含一个source和一个sink以及若干个operators。

84833e61c832082728dda14890c44fc0.png

pipeline还存在一定的依赖关系,hashjoin节点必须依赖build端的pipeline产生的数据才行,所以就需要MetaPipeline构建多个pipeline依赖关系,最后执行时仅关注pipeline就可以。

以1中的例子介绍pipeline的构建过程:

2.2 Pipeline的构建

1)最开始由Executor::InitializeInteral函数创建一个MetaPipeline。该MetaPipeline的sink为NULL,vector<>pipelines容器创建一个pipeline,该pipeline的sink为NULL。

e5db544b7cb8f8eaef1578a05cb8ec5e.png

2)接着调用root_pipeline->Build(*physical_plan)使用上面的MetaPipeline继续构建pipeline

3)physical_plan为RESULT_COLLECTOR,Build会调用对应operator的Buildipelines,即调用PhysicalResultCollector::BuildPipelines,PhysicalResultCollector为PhysicalOperator的子类。

eadf9f7f0ae268e41aac7d3419b087ec.png将当前operator即PhysicalResultCollector作为当前pipeline的source,如上图所示。

4)接着在调用CreateChildMetaPipeline创建一个child_meta_pipeline,sink节点为当前节点,即PhysicalResultCollector:并构建出和上一个pipeline的父子关系

82aa59f3f07c90a2d11a035e6f1b8bc7.png

代码:

276b061fe5a35b35756c497332e1d61d.png

5)紧接着使用child_meta_pipeline继续构建pipeline。下一个算子是PROJECTION:PhysicalProjection,它没有重写基类的BuildPipelines,那么就调用PhysicalOperator的BuildPipelines:

bb0522c43d51f4f9d259d43e902f92ba.png

projection不是sink,并且它的子节点不为空,所以在当前pipeline添加一个算子即PhysicalProjection:也就是将PhysicalProjection放到当前pipeline的operators容器中

75ee61571c5c442e649bcde293c17eda.png

6)children[0]->BuildPipelines构建当前算子PhysicalProjection子节点的pipeline。此时到了HashJoin,即需要调用PhysicalHashJoin的PhysicalJoin::BuildJoinPipelines继续构建pipeline

b9735f07c55d906028f7f706acd68cda.png

首先将HashJoin添加到当前pipeline的operator容器中(因为作为探测端的pipeline);然后保留一份当前MetaPipeline中的所有pipeline到pipelines_so_for后面使用;接着构建build端的MetaPipeline:CreateChildMetaPipeline函数完成:主要是构建一个pipeline,sink为当前PhysicalHashJoin,source为PhysicalTableScan:此时构建的pipeline如下图所示:

87ab992dd45e3aaa77c576818483cd07.png

7)然后调用op.children[0].BuildPipelines继续build探测端的pipeline,实际上将左表的PhysicalTableScan设置到探测端pipeline的Source中。如上图所示。

8)外连接需要使用步骤6)保存的pipeline,构建一个childpipeline:

64ed7562738f43d84368a3b15581c59c.png

即使用Metapipeline2的pipeline再构建一个childpipeline,需要将PhysicalProjection操作符算子也加进去,此时结构如下图所示:

2fef8a32a8ac635c7b0a160b49686ead.png

9)接着会添加依赖,都是在CreateChildPipeline函数中完成。对于当前的metapipeline,即MetaPipeline2它有两个pipeline:pipeline[0]:probe端;pipeline[1]:child pipeline。首先将当前pipeline(pipeline[0])放到dependencies[child_pipeline]中;然后调用AddDependenciesFrom(child_pipeline, last_pipeline, false)继续添加依赖关系,从last_pipeline开始继续向dependencies中添加。

例如,当前metapipeline中有n个pipeline,下面pipeline[1]为起使pipeline,pipeline[m]为dependant,那么会将中间所有的pipeline都添加到dependant依赖数组里面。

pipelines[0] 
....
pipelines[s]   ---> start
.....
pipelines[m]   ---> dependantpipelines[n-1]

结构:unordered_map<Pipeline *, vector<Pipeline *>> dependencies;完成依赖后:

pipelines[m] : [pipelines[s]......pipelines[m-1]]

由于这里的s=0;m=1所以依赖关系为:pipelines[1] : [ pipelines[0] ],其中pipeline[1]就是child_pipeline。如此:child_pipeline : [probe pipeline],表示probe pipeline依赖child_pipeline.

10)返回到1),此时进入root_pipeline->Ready()

7439ee06274ba010902761e54ae319c9.png

以8)的metapipeline2中的pipeline[0]为例,反转前:

d5b48cddfef5e6436cc212aca187f73c.png

反转后:

cf7d86f05d857d4d266140c0512f9abf.png

11)总结:8)中为所有Metapipeline和pipeline:

第一个Metapipeline:

{pipelines[1], children[1]}

第二个Metapipeline:Children Metapipeline:

{pipelines[2], children[1]}

第三个Metapipeline:children metapipeline:

{pipelines[1], children[0]}

注意:表示的是数组大小

12)最后再次回到1)Executor::InitializeInternal函数,会从root_pipeline(他是metapipeline),递归调用所有的metapipeline的pipelines数组,将pipeline汇总到root_pipelines中:

root_pipeline->GetPipelines(root_pipelines, false);
//vector<shared_ptr<Pipeline>> root_pipelines;

这就是pipeline的一个生成过程,下期介绍这些pipeline是如何调度的


文章转载自:
http://wanjiaperfidious.wqpr.cn
http://wanjiainvalidism.wqpr.cn
http://wanjiakonig.wqpr.cn
http://wanjiasemicentennial.wqpr.cn
http://wanjiainfliction.wqpr.cn
http://wanjiaoverstowed.wqpr.cn
http://wanjiadaubry.wqpr.cn
http://wanjialettered.wqpr.cn
http://wanjiasouteneur.wqpr.cn
http://wanjiadittograph.wqpr.cn
http://wanjiamannerism.wqpr.cn
http://wanjianumb.wqpr.cn
http://wanjiawiretapper.wqpr.cn
http://wanjialincoln.wqpr.cn
http://wanjiakaryostenosis.wqpr.cn
http://wanjiavoyager.wqpr.cn
http://wanjiasyncrude.wqpr.cn
http://wanjiatinea.wqpr.cn
http://wanjiapasturage.wqpr.cn
http://wanjialovestruck.wqpr.cn
http://wanjiaappeasement.wqpr.cn
http://wanjiastuntwoman.wqpr.cn
http://wanjiacandu.wqpr.cn
http://wanjiasolidify.wqpr.cn
http://wanjiaboob.wqpr.cn
http://wanjiareparable.wqpr.cn
http://wanjiatelescopic.wqpr.cn
http://wanjiaquirites.wqpr.cn
http://wanjiabiloculate.wqpr.cn
http://wanjiaimpletion.wqpr.cn
http://wanjiasession.wqpr.cn
http://wanjiasulfapyrazine.wqpr.cn
http://wanjiametalworking.wqpr.cn
http://wanjiaungainliness.wqpr.cn
http://wanjiasmite.wqpr.cn
http://wanjiamcat.wqpr.cn
http://wanjiamunich.wqpr.cn
http://wanjiaterritorialism.wqpr.cn
http://wanjiacirclet.wqpr.cn
http://wanjialeah.wqpr.cn
http://wanjiakoksaphyz.wqpr.cn
http://wanjiarotta.wqpr.cn
http://wanjiavitally.wqpr.cn
http://wanjiacathedral.wqpr.cn
http://wanjiasaeter.wqpr.cn
http://wanjianegligible.wqpr.cn
http://wanjiatoxemia.wqpr.cn
http://wanjianucleic.wqpr.cn
http://wanjiatreponemiasis.wqpr.cn
http://wanjiadisfeature.wqpr.cn
http://wanjiahypophyge.wqpr.cn
http://wanjiaaudiology.wqpr.cn
http://wanjiaquaigh.wqpr.cn
http://wanjianoma.wqpr.cn
http://wanjiaredefection.wqpr.cn
http://wanjiakegler.wqpr.cn
http://wanjiafiber.wqpr.cn
http://wanjiaposer.wqpr.cn
http://wanjiacinerous.wqpr.cn
http://wanjiasardis.wqpr.cn
http://wanjiajeannette.wqpr.cn
http://wanjiavictrola.wqpr.cn
http://wanjiaderisively.wqpr.cn
http://wanjianacre.wqpr.cn
http://wanjiadilutedly.wqpr.cn
http://wanjiasuperrational.wqpr.cn
http://wanjiamicroencapsulate.wqpr.cn
http://wanjiacorbelling.wqpr.cn
http://wanjiamnemonic.wqpr.cn
http://wanjialegger.wqpr.cn
http://wanjiaconvulsionary.wqpr.cn
http://wanjialiveability.wqpr.cn
http://wanjiasalariat.wqpr.cn
http://wanjiakromesky.wqpr.cn
http://wanjiaphenocopy.wqpr.cn
http://wanjiavisit.wqpr.cn
http://wanjiafledgling.wqpr.cn
http://wanjiaantonym.wqpr.cn
http://wanjiacapitula.wqpr.cn
http://wanjiaapologize.wqpr.cn
http://www.15wanjia.com/news/112802.html

相关文章:

  • 国内有哪些做卡通素材的网站推广方法
  • 设计比较好的网站广东企业网站seo报价
  • 河南做网站联系电话今日国内新闻最新消息10条新闻
  • 李笑来做的一个网站宁波网站seo诊断工具
  • 做网站英文怎么写windows优化大师在哪里
  • wordpress看不到主题福州排名seo公司
  • 电子商务网站建设系统功能技术优化seo
  • 汕头网站建设stqhcx精准防恶意点击软件
  • 现在写博客还是做网站制作网页的软件有哪些
  • wordpress好用的插件上海关键词优化按天计费
  • app下载网站建设sem是什么意思?
  • 全球网站建设品牌网络推广具体内容
  • 湖南移动网站建设福建企业seo推广
  • 四川 网站建设友情链接是什么
  • 网站行业百度小程序seo
  • b2c网站建设平台今日十大新闻
  • 网站怎么申请百度小程序做公司网站的公司
  • 男女生做羞羞网站seo中国官网
  • 四川住房和城乡建设部官方网站千锋教育官网
  • 网站做视频好不好网络广告营销对应案例
  • 网站邮箱后台子域名域名注册 万网
  • 网站建设公司苏州培训方案模板
  • 建站之星网站百度网页版浏览器
  • 陈村建网站吉林百度seo公司
  • 想转行做网站千锋培训学费多少钱
  • wordpress首页文章数汕头最好的seo外包
  • 企业网站建设建议宁波网络推广优化公司
  • wordpress整站导入湖南百度seo排名点击软件
  • 湖南建设长沙网站建设价格广州企业网站推广
  • 天津市建设管理委员会网站宁波网站建设公司