写点什么

presto 设计与实现

0 人感兴趣 · 13 次引用

  • 最新
  • 推荐
https://static001.geekbang.org/infoq/c8/c85e1d1473cfc7920401c71eaa093621.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(十四):SQL 查询过程总结

用户头像
冰心的小屋
2023-09-08

对于 Presto SQL 语句执行过程,之前的几篇文章已经介绍过 Presto JDBC、基于 ANTLR 4 的词法分析、语法分析、抽象语法树生成和 SQL 查询状态机,今天整体回顾下 SQL 语句完整的执行过程,做个全面的总结。

https://static001.geekbang.org/infoq/fc/fcc772c1021eb231e3dba460a6b75082.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(十三):查询状态机

用户头像
冰心的小屋
2023-09-03

为了对 SQL 查询的关键步骤进行标记,Presto 定义了 SQL 查询状态,使用枚举 QueryState 表示,同时使用类 QueryStateMachine 管理 SQL 查询当前状态、SQL 消耗资源和查询状态间合法的切换,每个 SQL 查询只有一个 QueryStateMachine 实例。

https://static001.geekbang.org/infoq/8c/8c0062dd64222826cc73d4e0efa6f5b7.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(十二):SQL 逻辑计划

用户头像
冰心的小屋
2023-08-30

逻辑计划:通过对抽象语法树的遍历,将语法树上的 Node 节点转化成 1 个或多个有前后依赖关系的计划,节点遍历完毕即生成一个完整的计划链表,这就是逻辑计划。逻辑计划让 SQL 查询离数据库、表、列和数据更近了一步。

https://static001.geekbang.org/infoq/72/72655f321504e8858272d0df075e783d.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(十一):抽象语法树 AST

用户头像
冰心的小屋
2023-08-30

ANTLR是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。

https://static001.geekbang.org/infoq/17/173f5475f266029adb6e3fb4ee296498.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(十):SQL 语法分析

用户头像
冰心的小屋
2023-08-27

SQL 语句经过词法分析解析后,会转化成 Token 序列作为语法分析器的输入,语法分析器加载所有的语法规则,根据内部定义的解析策略对 Token 序列进行解析。

https://static001.geekbang.org/infoq/50/505441fd09516012327c7ed4bba88b76.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(九):SQL 词法分析

用户头像
冰心的小屋
2023-08-27

一条 SQL 语句在实际执行前,会经过一系列处理,其中开始阶段的词法分析、语法分析和生成 AST 的过程是 SQL 查询的前提条件。

https://static001.geekbang.org/infoq/5a/5acf4386437563b79868295c1680fbfd.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(八):Presto JDBC

用户头像
冰心的小屋
2023-08-25

JDBC:Java Database Connectivity 是 Java 访问数据库的接口规范,访问数据库需要选择对应的 JDBC 实现。MySQL、Oracle 和 Postgresql 都有对应的 JDBC 的实现,Presto 也是如此,Presto 基于 HTTP 协议实现了 JDBC 规范。

https://static001.geekbang.org/infoq/87/8754e0511e9a32a7ee84ad1d75dd997f.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(七):Event

用户头像
冰心的小屋
2023-08-23

编码实现时尽量减少前后依赖,让代码变得简单,易于维护。这里推荐使用观察者模式来解耦,每个分发逻辑只监听关心的事件。当然我们不是从 0 开始,可以从 Airlift Event 开始。

https://static001.geekbang.org/infoq/e7/e75288df7fd3b3c1f8c07e3ae6a965f0.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(六):JMX

用户头像
冰心的小屋
2023-08-22

JMX:Java Management Extensions 是 Java 的一个开发和通信的标准,用于管理监控应用程序状态。

https://static001.geekbang.org/infoq/01/0125fa40d9f16581a5c3c3a0b27e8ea6.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(五):自动配置

用户头像
冰心的小屋
2023-08-21

Presto 基于 Airlift 构建的分布式 SQL 查询引擎,在 Presto 中 Airlift 起着举足轻重的作用,如果 Presto 是座大厦,那么 Airlift 就是大厦的地基。

https://static001.geekbang.org/infoq/59/597fc5888db49c9effda8c9f0e943cef.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(四):动态代码生成 ByteBuddy

用户头像
冰心的小屋
2023-08-19

动态代码生成就是运行时通过编码的方式定义类的限定名、属性和方法等,并将其转化为可以被 ClassLoader 直接加载的 Java 字节码。

https://static001.geekbang.org/infoq/d0/d03dae71d30f3b22b4ada1d93556a30f.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(三):依赖注入框架 Guice

用户头像
冰心的小屋
2023-08-18

在上篇文章中已经介绍,Presto 依赖了众多的开源项目,下面让我们按照开源项目在 Presto 实现过程中的重要程度逐一分析,如果你对其中某些开源项目已经非常熟悉,你可以略过相关章节。

https://static001.geekbang.org/infoq/50/50a26ddf154698dee5fd5eb62a9450c3.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Presto 设计与实现(二):一切从 0 开始?

用户头像
冰心的小屋
2023-08-17

从集群启动的角度看,每个节点首先加载本地配置标识自己的身份信息,向 coordinator 发送 http 请求在 header 中附带标识信息,经过一定时间 coordinator 会收集到所有节点发送的标识信息,进行汇总后,同步一份给所有节点。

presto 设计与实现_presto 设计与实现技术文章_InfoQ写作社区