深度解析DuckDB的ScheduleEvents
1.ScheduleEventData
2.ScheduleEventsInternal
3.SchedulePipeline
3.1 Event
3.2 PipelineEventStack
3.3 主逻辑
4.可视化总结
书接上回熬夜三晚之深度解析DuckDB MetaPipeline,MetaPipeline在初始化的时候会构建出下面几个:
第一个MetaPipeline
{pipelines[1], children[1]}
┌───────────────────────────┐
│ RESULT_COLLECTOR │
└───────────────────────────┘
children MetaPipeline
上面的child MetaPipeline
{pipelines[2], children[1]}
需要注意Ready()之后除了operators逆序,可以看到operations数组顺序发生了变化。
pipelines[0]
┌───────────────────────────┐
│ RESULT_COLLECTOR │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ HASH_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ INNER │
│ stu_id = id │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ EC: 4 │
│ Cost: 4 │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ PROJECTION │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ name │
│ score │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ SEQ_SCAN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ score │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ stu_id │
│ score │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ EC: 4 │
└───────────────────────────┘
pipeline[1]
┌───────────────────────────┐
│ RESULT_COLLECTOR │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ PROJECTION │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ name │
│ score │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ HASH_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ INNER │
│ stu_id = id │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ EC: 4 │
│ Cost: 4 │
└───────────────────────────┘
children MetaPipeline
上面child MetaPipeline
{pipelines[1], children[0]}
pipeline[0]
┌───────────────────────────┐
│ HASH_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ INNER │
│ stu_id = id │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ EC: 4 │
│ Cost: 4 │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ SEQ_SCAN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ student │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ id │
│ name │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ EC: 3 │
└───────────────────────────┘
在InitializeInternal
最后有一行非常重要的代码:
ScheduleEvents(to_schedule);
to_schedule为不含root的所有MetaPiple,比如说上面第一个包含下面的pipeline是不在to_schedule里面的,所以total_pipelines为2。
┌───────────────────────────┐
│ RESULT_COLLECTOR │
└───────────────────────────┘
本节将会带你读懂这张图~
内容已经分享至知识星球,目前更新了很多内容,例如:《C++那些事强化版》、《十日狂练》、《十日Mysql实战》、《工作求职分享》、《源码阅读》,期待一起来学习呀~
内容如下: