OLAP引擎底层原理与设计实践

OLAP引擎底层原理与设计实践电子书籍推荐下载地址
内容简介:
本书从OLAP的技术与挑战开始引入主题,先讲基本原理和使用方法,再逐层深入到源码分析上,由浅入深。在内容安排上详细拆解了OLAP分析引擎中的SQL查询解析器、优化器、调度器、执行器这几个核心组件,并将内容扩展到OLAP分析引擎的常见高性能优化方案上。本书分为6篇,共14章节。从OLAP核心概念出发,以Presto为例,从整体执行流程到不同SQL的执行原理,力图把OLAP查询的核心流程以一种系统化的方式来给读者讲清楚。
第一篇(1-2章)总体介绍业界常见的OLAP引擎并分析优劣,讨论OLAP引擎的技术发展趋势,以及如何选型,介绍了Presto相关的背景知识。
第二篇(3-4章)详细的串讲了查询执行的整个过程,带出了查询解析器、优化器、调度器、执行器几个核心模块的工作原理。
第三篇(5-8章)以例讲理,是多种经典SQL的执行原理解析,复杂度逐章递增,包含了投影变换、过滤、行数限定、排序以及多种聚合场景。
第四篇(9-10章)详解分布式查询执行的数据交换机制,涵盖了查询规划、调度、执行的多个交叉知识点。
第五篇(11-12章)以Presto为例整体介绍了比较流行的OLAP引擎扩展机制——插件体系与连接器。
第六篇(13-14章)是函数的设计原理与开发实战,介绍了函数注册、解析识别、调用等重要流程,最后从标量函数、聚合函数两方面入手,用多个实际的案例来介绍高级API(注解框架)的开发方法以及低级API的底层开发方法。
我们在创作本书时力争做到以下几点:
1)用心创作,而不是堆砌代码凑字数、无脑搬官方文档
2)结合SQL用例讲解技术原理,而不是生硬表达概念或源码
3)知识分层由浅入深,而不使内容过于浅显表面或深入晦涩
4)持续打磨表达能力,使内容逻辑合理清晰、通顺流畅
5)将知识泛化到通用OLAP引擎设计原理使其能够同样适用于Clickhouse、Doris等技术的受众,而不是只关注特定技术的特定细节
如果你正在寻找一本系统性介绍OLAP引擎的好书、如果你希望在使用OLAP引擎的同时深入掌握其核心原理、如果你的目标是从低中阶工程师晋升为资深技术专家;如果你最近在准备数据技术职位的求职面试;我们相信《OLAP引擎底层原理与设计实践》这本书能够有效的帮助到你。
书籍目录:
目录
推荐序一
推荐序二
推荐序三
推荐序四
前言
第01篇 OLAP基本原理
第01章 OLAP引擎介绍与对比
1.1 OLAP的定义与对比标准
1.1.1 OLAP的定义
1.1.2 OLAP引擎之间的对比标准
1.2 各种OLAP引擎的主要特点
1.2.1 Apache Hive
1.2.2 Apache Spark SQL、Apache Flink SQL
1.2.3 Clickhouse
1.2.4 Elasticsearch
1.2.5 Presto
1.2.6 Apache Impala
1.2.7 Apache Doris
1.2.8 Apache Druid
1.2.9 总结
1.3 再谈对Presto技术发展的理解
1.4 总结、思考、实践
第02章 Presto基本介绍
2.1 Presto概述:特性、原理、架构
2.2 Presto的应用场景与企业案例
2.2.1 Presto的使用场景
2.2.2 Presto的企业案例
2.2.3 Presto不适合哪些场景
2.3 Presto作为OLAP引擎在生产环境中的常见问题与方案
2.3.1 查询协调节点单点问题
2.3.2 查询执行过程没有容错机制
2.3.3 查询执行时报错exceeding memory limits
2.3.4 无法动态增删改数据目录;不支持动态注册UDF
2.3.5 查询执行结果没必要经过集群协调节点给到客户端
2.3.6 不支持低延迟(百毫秒级别)、高并发(5000+QPS)
2.4 Presto与Trino的项目与版本的选择
2.4.1 两个Presto:TrinoDB与PrestoDB选择哪个?
2.4.2 本书为什么用Trino的v350版本来做介绍?
2.4.3 Trino项目源码结构
2.5 编译与运行Presto源码
2.5.1 环境准备
2.5.2 下载源码 & 载入IDEA
2.5.3 编译Presto源码
2.5.4 将Antlr4自动生成的代码标记为generated source
2.5.5 在IDEA中运行3个节点的Presto集群
2.5.6 运行Presto命令行工具
2.5.7 调试Presto源码常见问题
2.6 基于Presto的数据仓库及本书常用SQL介绍
2.6.1 数据仓库介绍
2.6.2 TPC-DS Data Model数据模型介绍
2.6.3 本书用于原理讲解的常用SQL
2.6.4 在哪里执行本节介绍的SQL?
2.7 总结、思考、实践
第02篇 查询执行的整体串讲与核心模块拆解
第03章 分布式查询执行整体流程串讲
3.1 分布式OLAP引擎整体架构及查询执行原理
3.2 分布式查询执行的整体介绍
3.2.1 从分布式架构上看SQL查询的执行流程
3.2.2 从功能模块中看SQL执行流程
3.2.3 原理讲解涉及的案例介绍
3.3 查询的接收、解析、提交
3.3.1 第一步:接收SQL查询请求
3.3.2 第二步:词法与语法分析并生成抽象语法树
3.3.3 第三步:创建QueryExecution并提交给ResourceGroupManager运行
3.4 查询执行计划的生成与优化
3.4.1 第四步:语义分析(Analysis)、生成执行计划
3.4.2 第五步:优化执行计划,生成优化后的执行计划
3.4.3 第六步:将逻辑执行计划树拆分为多个子树
3.5 查询执行计划的调度
3.5.1 第七步:创建SqlStageExecution(创建查询执行阶段)
3.5.2 第八步:查询执行阶段调度-生成HttpRemoteTask并分发到查询执行节点
3.6 查询执行计划的执行
3.6.1 第九步:在多个查询执行节点上执行任务产出查询结果
3.6.2 第十步:分批返回查询计算结果给SQL客户端
3.7 总结、思考、实践
第04章 查询引擎核心模块拆解
4.1 查询引擎核心模块拆解
4.1.1 查询执行计划生成的设计实现
4.1.2 生成初始逻辑计划
4.1.3 使用PlanNode表达逻辑执行计划
4.1.4 总结
4.2 查询执行计划优化的基本原理
4.2.1 查询执行计划优化的目的
4.2.2 查询执行计划优化的基本原理
4.2.3 查询执行计划优化的基础算法
4.3 查询执行计划优化的设计实现
4.3.1 执行计划优化的工作流程
4.3.2 两种优化器实现:非迭代式优化器、迭代式优化器
4.4 总结、思考、实践
第03篇 查询引擎原理的案例讲解
第05章 数据过滤与投影相关查询的执行原理解析
5.1 数据投影、过滤查询的整体介绍
5.2 SQL-01简单拉取数据查询的实现原理
5.2.1 执行计划的生成与优化
5.2.2 分布式调度与执行的设计实现
5.3 SQL-02数据过滤与投影查询的实现原理
5.3.1 执行计划的生成与优化
5.3.2 分布式调度与执行的设计实现
5.4 数据过滤与投影相关查询涉及的查询优化
5.4.1 列裁剪(Column Pruning)
5.4.2 部分计算下推到存储服务
5.4.3 表达式计算的优化
5.5 总结、思考、实践
5.5.1 关于如何设计优秀OLAP引擎的引申思考
5.5.2 阅读与Debug UT是学习优秀开源项目的绝佳方法
5.5.3 思考与实践
第06章 行数限定与排序相关查询的执行原理解析
6.1 行数限定与排序相关查询的整体介绍
6.2 SQL-10 行数限定查询的实现原理
6.2.1 执行计划的生成与优化
6.2.2 分布式调度与执行的设计实现
6.3 SQL-11 排序查询的实现原理
6.3.1 执行计划的生成与优化
6.3.2 分布式调度与执行的设计实现
6.4 SQL-12 排序与行数限定组合查询的实现原理
6.4.1 执行计划的生成与优化
6.4.2 分布式调度与执行的设计实现
6.5 简单SELECT查询相关的查询优化
6.5.1 将LIMIT计算下推到数据源连接器
6.5.2 去除不需要的LIMIT
6.5.3 将ORDER BY + LIMIT优化为TopN计算
6.6 总结、思考、实践
第07章 简单聚合查询的执行原理解析
7.1 聚合查询原理通识性介绍
7.1.1 常见的聚合查询
7.1.2 聚合查询是有状态计算
7.1.3 实现分布式聚合的几种计算模型
7.1.4 Presto对聚合查询的设计与抽象
7.2 SQL-20不分组聚合查询的实现原理
7.2.1 执行计划的生成与优化
7.2.2 分布式调度与执行的设计实现
7.2.3 扩展知识:使用Scatter-Gather模型实现SQL-20
7.2.4 总结
7.3 SQL-21分组聚合查询的实现原理
7.3.1 执行计划的生成与优化
7.3.2 分布式调度与执行的设计实现
7.3.3 扩展知识:使用Scatter-Gather模型实现SQL-21
7.3.4 总结
7.4 聚合函数的设计与实现
7.5 总结、思考、实践
第08章 复杂聚合查询的执行原理解析
8.1 SQL-22去重计数查询的实现原理
8.1.1 执行计划的生成与优化
8.1.2 分布式调度与执行的设计实现
8.1.3 扩展知识:使用Scatter-Gather模型实现SQL-22
8.1.4 总结
8.2 SQL-23多个聚合计算查询的实现原理
8.2.1 执行计划的生成与优化
8.2.2 分布式调度与执行的设计实现
8.2.3 为什么Presto要引入MarkDistinct优化?
8.2.4 扩展知识:使用Scatter-Gather模型实现SQL-23
8.2.5 总结
8.3 SQL-30综合多种计算查询的实现原理
8.3.1 执行计划的生成与优化
8.3.2 分布式调度与执行的设计实现
8.3.3 扩展知识:使用Scatter-Gather模型实现SQL-30
8.3.4 总结
8.4 常见聚合查询优化手段与优化器
8.4.1 将聚合操作拆分为部分聚合与最终聚合
8.4.2 在上下游任务中传播哈希聚合分组列的哈希值
8.4.3 部分聚合计算下推
8.4.4 排序与行数限定计算优化为TopN计算
8.4.5 基于代价评估的方式来决定如何选择执行模型
8.4.6 利用存储的数据分布特性做优化
8.5 总结、思考、实践
第04篇 查询分布式执行的数据交换原理
第09章 数据交换在查询规划、调度、执行中的基本原理
9.1 数据交换机制简介
9.1.1 数据交换是什么?
9.1.2 何时需要做数据交换?
9.1.3 数据交换是拉取模型
9.1.4 任务之间数据交换与任务内部数据交换
9.1.5 数据交换的代价
9.1.6 如何完整的学习掌握数据交换的知识体系?
9.2 查询优化阶段中任务之间数据交换的设计实现
9.2.1 ExchangeNode是什么
9.2.2 利用AddExchanges优化器插入ExchangeNode
9.2.3 AddExchanges优化器决策在哪里插入ExchangeNode的主要考虑因素
9.2.4 AddExchanges优化器的设计实现思路
9.2.5 拆分PlanFragment
9.3 查询调度与执行阶段的整体设计思路
9.3.1 如何在分布式查询集群中唯一确定某个任务在哪里?
9.3.2 对于每个任务哪些任务是它的上游?哪些任务是它的下游?
9.3.3 对于上游任务产出的每行数据,它应该交付给下游哪个任务?
9.3.4 上游任务与下游任务之间数据交换的交互机制是什么?
9.3.5 上下游任务生产与消费的速度不能完全一致怎么办?
9.4 总结、思考、实践
第10章 数据交换在查询调度、执行中的详细设计
10.1 查询调度阶段中任务之间数据交换的设计实现
10.1.1 调度部分整体介绍
10.1.2 StageLinkage建立相邻上下游查询执行阶段间的数据依赖关系
10.1.3 RemoteTask中与任务之间数据交换相关的抽象设计
10.2 查询执行阶段中任务之间数据交换上游的设计实现
10.2.1 整体概述
10.2.2 OutputBuffer的工作流程
10.2.3 四种不同的OutputBuffer具体实现类
10.2.4 两种OutputOperator
10.3 查询执行阶段中任务之间数据交换下游的设计实现
10.3.1 整体概述
10.3.2 两种用于拉取上游任务数据的SourceOperator
10.4 上游任务与下游任务之间数据交换的RPC交互机制
10.4.1 数据交换的RPC通信协议
10.4.2 SerializedPage的序列化格式
10.5 任务内部数据交换基本原理
10.6 利用数据交换的能力实现的特殊功能
10.6.1 利用数据交换功能在查询执行路径实现的反压机制
10.6.2 利用数据交换能力实现部分SQL的LIMIT语义
10.6.3 任务之间数据交换交互中的乱序请求
10.6.4 Presto如何做到分批计算与返回执行结果
10.7 总结、思考、实践
第05篇 连接器插件体系详解与开发实践
第11章 连接器插件体系详解
11.1 插件体系整体介绍
11.1.1 插件概述
11.1.2 插件分类
11.1.3 SPI机制
11.2 插件加载机制
11.2.1 插件初始化流程入口
11.2.2 插件加载
11.2.3 插件整合
11.2.4 类加载原理
11.3 连接器实现原理介绍
11.3.1 连接器概述
11.3.2 连接器插件实例化
11.3.3 元数据模块
11.3.4 数据读取
11.3.5 部分计算下推
11.3.6 连接器在查询执行中的作用总结
11.4 关于连接器的一些深入思考
11.4.1 连接器是对数据读取的高度抽象
11.4.2 站在OLAP引擎设计者视角来理解连接器的设计范式
11.5 总结、思考、实践
第12章 连接器开发实践:以Example-HTTP连接器为例
12.1 Example-Http连接器基本介绍
12.2 插件基础代码
12.2.1 ExamplePlugin
12.2.2 ExampleConfig
12.2.3 依赖注入:ExampleModule
12.2.4 ExampleConnector
12.2.5 ExampleConnectorFactory
12.3 元数据模块
12.3.1 ExampleClient
12.3.2 ExampleTable
12.4 自定义句柄
12.5 划分分片
12.6 读取分片
12.7 实现与连接器交互的HTTP数据源
12.7.1 定义元数据接口
12.7.2 定义数据接口
12.7.3 example-http数据源的代码实现示例
12.7.4 在Presto跑通example-http数据源的查询
12.8 总结、思考、实践
第06篇 函数的执行原理与自定义函数开发实践
第13章 函数的执行原理
13.1 函数体系总览
13.1.1 函数分类
13.1.2 函数的生命周期
13.1.3 函数开发的几种途径
13.1.4 函数本质
13.1.5 入门函数体系知识的学习思路
13.2 函数的基本构成
13.2.1 函数管理
13.2.2 函数元数据
13.2.3 函数签名
13.2.4 泛型变量
13.2.5 字面量变量
13.2.6 自动注入的参数
13.3 函数相关的主要流程
13.3.1 引擎启动时的函数注册
13.3.2 查询执行时的函数解析
13.3.3 查询执行时的函数调用
13.4 总结、思考、实践
13.4.1 总结
13.4.2 知识扩展
13.4.3 思考、实践
第14章 自定义函数开发实践
14.1 标量函数开发实践
14.1.1 标量函数开发方法1-注解框架
14.1.2 标量函数开发方法2-底层开发方法
14.2 聚合函数开发实践
14.2.1 实现聚合函数的核心原理
14.2.2 开发方法介绍
14.2.3 聚合函数开发方法1-注解框架
14.2.4 聚合函数开发方法2-底层开发
14.3 总结、思考、实践
作者简介:
高英举
现于某互联网大厂从事时序数据引擎研发工作,超过12年工作经验,涉及数据平台、数据仓库、OLAP引擎内核。熟悉Hadoop、Presto、Elasticsearch、Spark、Flink等大数据技术,在多个互联网大厂的生产环境中有大规模使用与深入优化经验。此外,也是数据集成流批处理工具Apache SeaTunnel(https://github.com/apache/seatunnel)项目创始人、PMC、主要代码贡献者。
许一腾
现任某互联网大厂数据工程师,主攻数据隐私合规建设。超过7年工作经验,曾在腾讯看点、医疗担任数据研发负责人,期间负责多种大数据平台与能力建设,包括数据质量、联邦查询、数仓建模、DataOps、详细数据血缘、基于意图的权限控制等方向。平时喜欢研究源码,从0到1学习了Redis、Presto(Trino)、Spark等多种开源项目,并且热爱分享。
其它内容:
暂无其它内容!
下载评论
-
用户1727649704:
( 2024-09-30 06:41:44 )
图文功能搭配PDF/MOBI格式,精校数字阅读体验,资源优质。
-
用户1739600397:
( 2025-02-15 14:19:57 )
完整版本教材资源,MOBI/AZW3格式适配各种阅读设备,体验良好。
-
用户1744663743:
( 2025-04-15 04:49:03 )
互动版电子书下载极速,支持PDF/MOBI格式导出,资源优质。
-
用户1722047958:
( 2024-07-27 10:39:18 )
流畅下载EPUB/MOBI文件,完整学术推荐收藏,值得收藏。
-
用户1735703535:
( 2025-01-01 11:52:15 )
精校版本教材资源,EPUB/AZW3格式适配各种阅读设备,值得收藏。
相关书评
-
大数据和时序数据处理强烈推荐
来源:豆瓣 发布时间:2025-05-11 02:10:08
-
由浅入深 通俗易懂
来源:豆瓣 发布时间:2025-05-11 02:10:08
-
云原生强烈推荐
来源:豆瓣 发布时间:2025-05-11 02:10:08
-
《OLAP引擎底层原理与设计实践》
来源:豆瓣 发布时间:2025-05-11 02:10:08
下载点评