cockroach官方文档翻译---2.2 SQL层

2.2 SQL层

SQL层是cockroachDB的架构中最上层,提供SQL API给开发者,将SQL语句转化为KV操作,使其可以被数据库的其他层使用。

本页索引

**概要

 --与其他层的交互

**组件

 --关系结构

 --SQL API

 --PostgresSQL线路协议

 --SQL解析器,计划器,执行器

 --编码

 --DistSQL

**与其他层的交互技术

 --SQL&事务层

2.2.1 概要

 一旦cockroachDB被部署,开发者只需要集群的连接串和SQL语句就可以开始工作。因为cockroachDB节点都是对称的,开发者可以发送请求到任意一个节点(cockroachDB在负载均衡器的作用下工作良好),无论哪个节点接受到请求,都被视为入口节点,其他层继续处理请求。

  开发者对集群发送请求,请求使用SQL 语句编写,但是数据最后被写入或者从存储层读取是KV键值对。为了处理这种情况,SQL层将SQL语句转化成一系列KV操作,并把它传送到事务层。

**与其他层进行交互

  为了与其他层进行交互,SQL层:发送请求到事务层

2.2.2 组件

 ** 关系结构

   对于开发者,cockroachDB数据存储在关系结构中,比如:行/列,表由行和列组成,数据库是表的集合,集群由多个数据库组成。因为这种结构,cockroachDB具有典型的关系数据库特点,如:约束,外键。应用开发者相信,数据库对于应用数据具有一致性的结构。数据验证不需要与应用逻辑分离。

**SQL API

  CockroachDB实现了大部分ANSI SQL标准,即关系结构,你可以查看通过以下链接查看对SQL语句的支持情况

 https://www.cockroachlabs.com/docs/stable/sql-feature-support.html

在SQL API中,让开发者使用ACID事务,通过(beginendisolation levels) 等

** PostgresSQL线路协议

 SQL查询到达你的集群通过PostgresSQL无线协议。应用连接集群支持Postgres-SQL兼容的驱动和很多PostgresSQL ORMs(对象关系映射)和GORM(GO)和Hibernate(Java).

**SQL解析器,计划器,执行器

 节点接收来自客户端的SQL语句,cockroachDB解析语句,创建查询计划,执行计划

--解析

查询被解析在yacc文件中,使用我们支持的语法描述,将以字符描述的查询,转化为Abstract syntax tree(AST,抽象语法树)。

--计划

通过AST,cockroachDB开始计划查询的执行,通过生成planNodes,每个planNodes包含使用KV操作的一系列代码,这就是SQL语句如何转化为KV操作。将SQL客户端语句解析成AST描述,其中包括像类型检查之类的操作。查看一个查询生成的planNodes,使用explain

--执行

PlanNodes继续被执行,开始与事务层进行交流。本步骤也包括,将SQL语句编码,或返回更低层译码值。

**编码

SQL语句使用被解析的字符进行重写,cockroachDB更低层处理处理主要的字节。这意味着SQL层,在查询执行中,必须将行数据从SQL字符串描述转化为字节传给更低层。将更低层返回的字节数据转化为SQL数据,返回给客户端。

对于索引列,字节编码保留与数据同样的排序,因为cockroachDB最终存储数据在有序的key-value map中,使用与数据一致的顺序存储字节,使KV数据可以高效的被扫描。

不过,对于没有索引的列(例如:no-primary key),cockroachDB使用valueencoding,消耗更少的空间,但是没有保护排序,查看具体的执行细节。

https://github.com/cockroachdb/cockroach/blob/master/docs/tech-notes/encoding.md

**DistSQL

CockroachDB是一个分布式数据库,开发了分布式SQL优化一些查询组件,可以动态加速涵盖多个ranges的查询。DistSQL的结构有自己的文档,以下初略的解释,它是如何工作的。

1)对于一个非分布式查询,协同节点接受到匹配这个查询的所有行,然后在整个数据集执行计算。

2)对于DistSQL兼容的查询,每个节点计算它涵盖的行,将结果(而不是整个数据集)分发到协同节点,协同节点合并每个节点的结果,最后返回一个单一结果给客户端。这种方式动态减少了协同节点的数据量,很好的应用了并行计算,最终减少了复杂查询的时间。例外,进程数据在节点中已经存储,使cockroachDB可以处理比单个节点存储数据量更大的行集合。

为了在分布式场景中执行sql语句,解释下面概念:

Logical Plan(逻辑计划):与上面描述的AST/planNode相似,它通过计算提供了一个抽象的(非分布式)数据流。

Physical Plan(物理计划):物理计划是逻辑节点与运行cockroach的物理机器的概念的映射,逻辑计划节点复制和specialized依赖于集群的拓扑结构。如上的planNodes,这些物理计划的组件可以被安排,并且执行在集群中。

对于DistSQL更细节的描述,请查看

https://github.com/cockroachdb/cockroach/blob/master/docs/RFCS/20160421_distributed_sql.md

2.2.3 与其他层的交互技术

从执行的planNodes转化出来的KV操作被发送到事务层。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值