cockroachDB技术架构学习——SQL层
cockroachDB的SQL api以PostgreSQL为蓝本进行交互。收到SQL RPC后,节点将它们转换为可与我们的分布式键值存储一起使用的操作。如果节点接收到无法直接服务的读取或写入请求,它会找到可以处理该请求的节点并与之通信。
SQL层
SQL层主要将客户端SQL查询转换为KV操作。
当开发人员向集群发送请求时,它们将以SQL语句的形式到达,但最终数据将作为键值(KV)对写入存储层并从存储层读取。SQL层将SQL语句转换为KV操作计划,并将其传递到事务层。
SQL parser解析器
在收到SQL请求之后,解析该语句,创建查询计划,然后执行该计划。
接收到的查询将针对yacc文件(描述了支持的语法)进行解析,并将每个查询的字符串版本转换为抽象语法树(AST)。
SQL planner计划器
AST随后分为三个阶段转换为查询计划:
- AST转换为高级逻辑查询计划。进行语义分析,检查查询是否有效;解析名称,消除不需要的中间计算以及确定要用于中间结果的数据类型。
- 使用有效地转换优化来简化逻辑计划。
- 使用搜索算法优化逻辑计划。评估执行查询的多种可能方式并选择成本最低的执行计划。
物理计划
确定哪些节点将参与查询的执行
SQL executor执行器
物理计划的组成部分将发送到一个或多个节点以执行。在每个节点上,cockroachDB产生一个逻辑处理器来计算查询的一部分。节点内部或节点之间的逻辑处理器通过逻辑数据流相互通信。查询的组合结果将发送回接收查询的第一个节点,再发送给SQL客户端。
每个处理器对由查询操纵的标量值使用二进制形式编码,与SQL中使用的形式不同。因此,必须对SQL查询中列出的值进行编码,并且在将逻辑处理器之间通信的数据以及从磁盘读取的数据进行解码之后,再将其发送回SQL客户端。
编码方式
cockroachDB的较低层主要以字节为单位,所以在SQL层中,查询执行时,cockroachDB必须将行数据从其SQL表示形式转换为字节,然后将从较低层返回的字节转换成可传递回客户端的SQL数据。
DistSQL
Distributed SQL(分布式SQL)优化工具,可以显著加快涉及多个节点的查询。对于与DistSQL兼容的查询,每个节点都会对其包含的行进行计算,然后将结果发送到协调节点。由协调节点汇总每个节点的结果,将单个响应返回给客户端。
本文地址:https://blog.csdn.net/qq_37813928/article/details/107507786