图3. 查询执行流程 用户通过JDBC/ODBC提交查询之后,查询解析器解析查询得到查询树,然后优化器根据查询树生成查询计划,派遣器和资源管理器交互得到资源,分解查询计划,然后派遣计划到Segment的执行器上面执行。最终结果会传回给用户。
弹性执行引擎有几个关键设计点:存储和计算的完全分离,无状态Segment以及如何使用资源。存储和计算的分离使得我们可以动态的启动任意多个虚拟Segment来执行查询。无状态Segment使得集群更容易扩展。要想保证大规模集群的状态一致性是比较困难的问题,所以我们采用了无状态的Segment。如何使用资源包括如何根据查询的代价申请多少资源,如何有效的使用这些资源以及如何使得数据局部性最优。OushuDB内部针对每一个部分都进行了优化的设计。
执行器是数据库最核心的部件之一,Oushu Database对执行器进行了完全重新设计,充分利用了最新CPU的每一个特性,比如SIMD指令等,可以做到性能的极致。