TDDL中的executor是整个系统的执行器层,封装了SQL运行的核心逻辑,依赖于optimizer层提供的接口,提供了以下流程:
- 将运行的SQL转换为parser层的SQLStatement对象
- 将SQLStatement对象转换为optimizer层的ASTNode语法树
- 根据预置的规则对AST语法树进行优化,提升分布式查询的效率
- 根据优化后的AST语法树生成执行计划IDataNodeExecutor
- 根据执行计划查找对应的GroupExecutor
- GroupExecutor中会为执行计划IDataNodeExecutor找到对应的Command Handler
- 不同的Command Handler将执行计划翻译为不同的查询语言,如SQL、或者HBase查询
- 在target上执行查询,收集结果
- merge结果返回
executor执行器层的核心是一种Command设计模式的结构:执行计划IDataNodeExecutor存在很多子接口,比如IQuery、IInsert、IDelete、IPut、IJoin等,每一种子接口可以看做一种特定类型的Command。executor层中为每一种Command定义了Handler,比如QueryHandler、DeleteHandler等,每种handler在不同存储介质(mysql、hbase)中有具体的实现。执行器的主要工作就是将SQL转化为Command,再找到对应的Handler执行。
executor层的核心类关系如下:
IExectuor是执行器的抽象,在AbstractGroupExecutor中定义了执行的主要流程
IRepository定义了存储介质的抽象,TDDL517中包含了mysql\hbase\bdb的实现
ICommandHandler是执行计划IDataNodeExecutor对应的Command执行者