系列 - Trino & Presto
从零开始读懂 Trino 的源码。
这个系列跟着一条真实查询的生命周期走:环境准备 → 架构总览 → Airlight 基础框架 → 服务启动 → 查询提交 → 语法树解析 → 执行计划生成 → 查询调度 → Task 执行 → 内存管理,最后是 SPI 扩展与自定义函数。
适合已经有分布式查询引擎基础的读者。每一篇都接着上一篇往下读,中间不跳步——Trino 的启动、编译和执行三条线是分头铺开又在执行计划处交汇的,单独看某篇容易断掉上下文。
第 13 篇《SPI & Plugin》尚未写完,先在目录里占个位。
| # | 篇目 | 这一篇讲什么 |
|---|---|---|
| 01 | Trino源码学习-准备工作 | 读源码前的环境、分支与依赖准备 |
| 02 | Trino源码学习-架构Overview | 协调节点、Worker 与查询生命周期——Trino 的整体架构 |
| 03 | Trino源码学习-基础框架Airlift | Airlift:用 Java 构建 REST 服务的轻量级框架 |
| 04 | Trino源码学习-Airlift源码分析 | Airlift 里如何用 Guice 做依赖注入与管理服务生命周期 |
| 05 | Trino源码学习-Trino启动 | 从启动流程看 Trino 是怎么起来的 |
| 06 | Trino源码学习-查询提交 | 查询从客户端提交到进入系统的完整链路 |
| 07 | Trino源码学习-Page数据结构 | 查询执行过程中底层的数据结构长什么样 |
| 08 | Trino源码学习-执行计划生成 | 逻辑执行计划是怎么构建出来的 |
| 09 | Trino源码学习-SQL语法树解析 | SQL 文本解析成语法树的两段式流程 |
| 10 | Trino源码学习-查询调度 | 逻辑计划如何被切分、调度到各个 Worker |
| 11 | Trino源码学习-TASK执行 | Task 在 Worker 侧的具体执行过程 |
| 12 | Trino源码学习-内存管理 | Trino 的两块内存管理机制 |
| 13 | Trino源码学习-SPI&Plugin(未完待续) | 用 SPI 与 Plugin 体系扩展 Trino 的扩展点 |
| 14 | Trino源码学习-自定义函数 | 实现并注册一个自定义函数的完整过程 |
| 15 | Trino Sql优化:Removing redundant ORDER BY | 去掉不影响结果却拖慢查询的冗余 ORDER BY |
| 16 | Presto/Trino 中 0.5 引发的精度谜团:Decimal 隐式类型推导与 MySQL 差异 | Decimal 字面量的隐式类型推导,让 bigint 运算走上另一条路 |