cockroachDB的SQL api以PostgreSQL为蓝本进行交互。收到SQL RPC后,节点将它们转换为可与我们的分布式键值存储一起使用的操作。如果节点接收到无法直接服务的读取或写入请求,它会找到可以处理该请求的节点并与之通信。
SQL层
SQL层主要将客户端SQL查询转换为KV操作。
当开发人员向集群发送请求时,它们将以SQL语句的形式到达,但最终数据将作为键值(KV)对写入存储层并从存储层读取。SQL层将SQL语句转换为KV操作计划,并将其传递到事务层。
SQL parser解析器
在收到SQL请求之后,解析该语句,创建查询计划,然后执行该计划。
接收到的查询将针对yacc文件(描述了支持的语法)进行解析,并将每个查询的字符串版本转换为抽象语法树(AST)。
SQL planner计划器
AST随后分为三个阶段转换为查询计划:
- AST转换为高级逻辑查询计划。进行语义分析,检查查询是否有效;解析名称,消除不需要的中间计算以及确定要用于中间结果的数据类型。
- 使用有效地转换优化来简化逻辑计划。
- 使用搜索算法优化逻辑计划。评估执行查询的多种可能方式并选择成本最低的执行计划。