CockroachDB架构——SQL层

更新时间:2023-07-16 00:13:05 阅读: 评论:0

CockroachDB架构——SQL层
美德有哪些ChockroachDB架构的SQL层向开发⼈员公开SQL API并将SQL语句转换成数据库其他部分使⽤的键值操作。
垃圾桶折纸--注意:
1)如果您还没有准备好,我们建议您阅读架构概览部分。
⼀.概览
⼀旦CockroachDB部署,开发⼈员只需通过连接串连接到簇并发送SQL语句开始⼯作。
因为CockroachDB节点⾏为都是对称的,开发⼈员能向任何节点发送请求(这意味着CockroachDB能与负载据衡器很好的⼯作)。⽆论哪个节点作为"⽹关节点(gateway node)"接收到请求,都像其他层⼀样处理该请求。
当开发⼈员向簇发送请求时,它们作为SQL语句到达,但数据最终作为键值对从存储层进⾏写和读。为了处理这些,SQL层将SQL语句转换成传递到事务层(transaction layer)的KV操作的⼀个计划(plan)。
清明主题
1.与其他层交互
与CockroachDB其他层的关系,SQL层:
将请求发送给事务层。
⼆.组件
1.关系结构(Relational structure)
开发⼈员可以体验以关系结构存储在CockroachDB中的数据,即,⾏和列。⼀组⾏和列组织到表中。表的集合组织数据库。您的簇能包含很多数据库。
因为这个结构,CockroachDB提供典型的类似约束(例如:外键)的关系特性。这让应⽤开发⼈员相信数据库将确保应⽤数据的⼀致性结构;数据校验不必单独建进应⽤逻辑中。
2.SQL API
CockroachDB实施⼤部分ANSI SQL标准以表明它的关系结构。
重要的是,通过SQL API,我们也让开发⼈员就像通过任何SQL数据库那样使⽤ACID语义的事务(be
gin,end,commit,等。)
3.PostgreSQL线协议
SQL查询通过PostgreSQL线协议到达您的簇。这使得您的应⽤通过⽀持⼤多数PostgreSQL兼容的驱动和很多像GORM(Go)和Hibernate(Java)PostgreSQL ORM就可以连接到簇。
4.SQL解析器、计划器和执⾏器
您的节点最终接收到客户端的SQL请求后,CockroachDB解析该语句,创建查询计划和执⾏该计划。
1)解析
接收到的查询针对我们的yacc⽂件进⾏解析(其描述我们⽀持的语法),并将每个查询的字符串版本转换为抽象的语法树(AST)。
2)逻辑计划
AST随后三阶段中被转换为查询计划:
--AST被转换为⾼级逻辑查询计划。在该转换期间,CockroachDB也进⾏语义分析,这包括检查查询
墨梅的古诗是否有效,名字解析,消除不必要的中间计算,以及确定中间结果使⽤什么数据类型。
海绵宝宝英文名--逻辑计划通过总是有效的转换优化进⾏简化。
男人疾病--逻辑计划通过评估执⾏该查询的很多可能⽅法的搜索算法进⾏优化,并选择⼀个最低成本的执⾏计划。
优化阶段的结果是⼀个优化过的逻辑计划。这可以通过explain命令进⾏观察。
3)物理计划
物理计划阶段基于范围位置信息决定哪些节点参与该查询的执⾏。这是CockroachDB决定将查询分布到数据存储最近的地⽅进⾏某些计算的阶段。
物理计划的结果是⼀个物理计划,且能⽤explain(distsql)进⾏观察。
4)查询执⾏
物理计划的组件送到⼀个或多个节点以执⾏。每个节点上,CockroachDB产⽣⼀个逻辑处理器来计算⼀部分查询。逻辑处理器在节点内或节点间通过逻辑数据流进⾏相互通信。查询的组合结果送到接收查询的第⼀个节点,并进⼀步被送⾄该SQL的客户端。
摩羯座和处女座
每个处理器使⽤查询操作标量值的编码格式。这是和SQL中所⽤不同的⼆进制格式。因此,列在SQL查询中的值必须被编码,并且,逻辑处理器间的通信数据及从磁盘读取的数据,送回⾄SQL客户端前必须被解码。
5)向量化查询执⾏
如果开启了向量执⾏,物理计划被送⾄节点通过向量化执⾏引擎进⾏处理。
接收到物理计划后,向量化引擎从磁盘批量读取表数据,并将数据从⾏格式转换成列格式。这些批量列数据存储于内存中,以便引擎在执⾏期间能快速访问它们。玩机家园
向量化引擎使⽤特殊的、预编译的函数,这些函数对列数据的特定类型的数组进⾏快速迭代。引擎处理每列数据时这些函数的列输出存储于内存中。
处理输⼊缓冲中的所有列数据后,引擎将列输出转换回⾏格式,并接着讲处理的数据⾏返回到SQL接⼝。⼀批表数据完全处理后,引擎按批处理后续的表数据以进⾏处理,指导查询执⾏完成。
处理后续的表数据以进⾏处理,指导查询执⾏完成。
5.编码
虽然SQL查询以可解析字符串编写,但CockroachDB低层主要按字节处理。这意味着在SQL层、查询执⾏,CochroachDB必须将SQL表⽰数据流从字符串转换为字节,并将低层返回的字节转换成能被传回客户端的SQL数据。
对索引列,该字节编码保留其表⽰数据类型的同样顺序也是重要的。这是因为CockroachDB最终按照排序的键值映射的⽅式存储数据。按照其表⽰数据同样顺序存储数据可以让我们⾼效的扫描KV数据。
但是,对⾮索引列(例如:⾮主键列),CockroachDB⽽是⽤⼀种消耗较少空间但不保留顺序的编码(被称为"值编码(value encoding)")
6.DistSQL
因为CockroachDB为分布式数据库,我们已经为有些查询开发了⼀个分布式SQL(DiskSQL)优化⼯具,其可以极⼤的提升涉及很多范围的查询性能。虽然DistSQL的架构值得编写⾃⼰的⽂档,这个粗略解释能提供⼀些其⼯作机制的洞察。
⾮分布式查询,协调节点接收匹配查询的所有数据⾏,并接着进⾏整个数据集的任何计算。
但是,对DistSQL兼容的查询,每个节点对其包含的数据⾏进⾏计算,并接着将结果(⽽⾮整个数据⾏集)送⾄协调节点。协调节点接着从每个节点汇聚结果,并最终将单个响应返回客户端。
这极⼤的减少了带到协调节点的数据量,且利⽤了以被充分证明的并⾏计算的概念,最终减少了完成复杂查询所消耗的时间。此外,这也处理以存储于该节点上的数据,使得CockroachDB处理⽐单个节点存储⼤得多的数据⾏集。
为了分布式⽅式运⾏SQL语句,我们引进了两个概念:
1)逻辑计划:类似上⾯描述的AST/planNode树,它表⽰流过各计算阶段的抽象(⾮分布式)数据流。
2)物理计划:物理计划概念上是逻辑计划节点到运⾏cockroach的物理机器的映射。逻辑计划节点根据簇拓扑被复制和指定。就像上⾯的planNode,物理计划的这些组件在簇上被调度和运⾏。
三.与其他层的技术交互
1.SQL层和事务层
来⾃被执⾏的planNode的KV操作被送⾄事务层。
四.个⼈看法
1.现在每款称为库的成熟产品,都具备的组件层,这也充分体检了SQL之美。

本文发布于:2023-07-16 00:13:05,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1098660.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   数据   计划
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图