登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入   新用戶註冊
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2024年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / 物流,時效:出貨後2-4日

2025年02月出版新書

2025年01月出版新書

2024年12月出版新書

2024年11月出版新書

2024年10月出版新書

2024年09月出版新書

2024年08月出版新書

2024年07月出版新書

2024年06月出版新書

2024年05月出版新書

2024年04月出版新書

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

『簡體書』OLAP引擎底层原理与设计实践 高英举 许一腾

書城自編碼: 4076961
分類: 簡體書→大陸圖書→計算機/網絡數據庫
作者: 高英举 许一腾
國際書號(ISBN): 9787111769842
出版社: 机械工业出版社
出版日期: 2025-02-01

頁數/字數: /
書度/開本: 16开 釘裝: 平装

售價:NT$ 556

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
《重访五四新文化:语言与文学》 (五四语言文学研究的经典作品;揭示胡适、鲁迅、周作人等重要人物的文学创作历程,文学革命、白话文运动等重大历史事件的发展脉络)
《 《重访五四新文化:语言与文学》 (五四语言文学研究的经典作品;揭示胡适、鲁迅、周作人等重要人物的文学创作历程,文学革命、白话文运动等重大历史事件的发展脉络) 》

售價:NT$ 500.0
迷宫的线团:培根自然哲学著作选
《 迷宫的线团:培根自然哲学著作选 》

售價:NT$ 403.0
魔鬼的代言人
《 魔鬼的代言人 》

售價:NT$ 245.0
九型人格2:发现你的人格类型
《 九型人格2:发现你的人格类型 》

售價:NT$ 347.0
你可以有情绪,但别往心里去
《 你可以有情绪,但别往心里去 》

售價:NT$ 214.0
汴京客
《 汴京客 》

售價:NT$ 305.0
好望角·滑向战争:决定历史的交涉与日本的失败
《 好望角·滑向战争:决定历史的交涉与日本的失败 》

售價:NT$ 500.0
八千里路云和月(白先勇新作!记述我的父亲母亲并及那个忧患重重的时代)
《 八千里路云和月(白先勇新作!记述我的父亲母亲并及那个忧患重重的时代) 》

售價:NT$ 316.0

編輯推薦:
Presto创始人,及来自字节跳动、B站的多位专家鼎力推荐。融合了两位作者在腾讯和字节做数据库开发、数据架构的经验。这本书不仅可以作为深入理解OLAP引擎核心原理和设计OLAP引擎的参考书,还可以作为使用Presto(Trino)的指导手册。
內容簡介:
这是一本从OLAP核心概念出发,以Presto为例,从整体执行流程到不同SQL的执行原理,完整呈现OLAP查询的核心流程和OLAP引擎设计思路,并指导读者形成OLAP引擎设计解决方案的专业技术工具书。本书不仅面向初级读者介绍了OLAP查询的基本原理和Presto使用方法,还从源码级剖析了OLAP引擎核心原理,包括SQL查询解析器、优化器、调度器、执行器等核心组件,并将内容扩展到OLAP引擎的常见高性能优化方案上。全书由浅入深,图文并茂,把晦涩难懂的内容讲解得透彻易懂。本书分为6篇,包括14章。第一篇(第1章和第2章)总体介绍业界常见的OLAP引擎并分析其优劣,讨论OLAP引擎的技术发展趋势及选型方法,介绍Presto背景知识及其使用方法、技巧。第二篇(第3章和第4章)串讲OLAP查询执行的整个过程,并概要性介绍查询解析器、优化器、调度器、执行器等核心模块的工作原理,目的是让读者形成整体认知。第三篇(第5~8章)以例讲理,对多种经典SQL的执行原理进行解析,复杂度从前到后逐章递增,包含了投影变换、过滤、行数限定、排序以及多种聚合场景。第四篇(第9章和第10章)详解分布式查询执行的数据交换机制,涵盖了查询规划、调度、执行的多个阶段等重点内容。第五篇(第11章和第12章)以Presto为例整体介绍流行的OLAP引擎扩展机制——插件体系与连接器。第六篇(第13章和第14章)主要介绍函数的设计原理与开发实战,这部分首先介绍函数注册、解析识别、调用等重要流程,最后从标量函数、聚合函数两方面入手,用多个实际案例介绍高级API(注解框架)的开发方法以及低级API的底层开发方法。
關於作者:
高英举
现于某互联网大厂从事时序数据引擎研发工作,有超过12年工作经验,涉及数据平台、数据仓库、OLAP引擎内核等多个领域。熟悉Hadoop、Presto、Elasticsearch、Spark、Flink等大数据技术,在多个互联网大厂的生产环境中有大数据产品大规模使用与深入优化经验。数据集成流批处理工具Apache SeaTunnel(https://github.com/apache/seatunnel)项目创始人、PMC、主要代码贡献者。
许一腾
现任某互联网大厂数据工程师,主攻数据隐私合规建设。超过7年工作经验,曾在腾讯看点、医疗担任数据研发负责人,期间负责多种大数据平台与能力建设,包括数据质量、联邦查询、数仓建模、DataOps、详细数据血缘、基于意图的权限控制等方向。平时喜欢研究源码,从0到1学习了Redis、Presto(Trino)、Spark等多种开源项目,并且热爱分享。
目錄
Contents 目 录
序一
序二
序三
序四(原版)
序四(中文版)
前言
致谢一
致谢二
第一篇 背景知识
第1章 OLAP引擎介绍与对比2
1.1 OLAP的定义与对比标准2
1.1.1 OLAP的定义2
1.1.2 OLAP引擎之间的对比标准3
1.2 各种OLAP引擎的主要特点6
1.2.1 Hive6
1.2.2 SparkSQL、FlinkSQL6
1.2.3 ClickHouse6
1.2.4 Elasticsearch8
1.2.5 Presto9
1.2.6 Impala10
1.2.7 Doris10
1.2.8 Druid11
1.2.9 总结12
1.3 再谈对Presto技术发展的理解13
1.4 总结、思考、实践15
第2章 Presto基本介绍16
2.1 Presto概述:特性、原理、架构16
2.1.1 一个高性能、分布式的SQL
   执行框架17
2.1.2 一套插件化体系18
2.1.3 开箱即用的SQL内置函数和
   连接器20
2.2 Presto的应用场景与企业案例20
2.2.1 Presto的应用场景20
2.2.2 Presto的企业案例21
2.2.3 Presto不适合哪些场景23
2.3 Presto常见问题及应对策略25
2.3.1 查询协调节点单点问题25
2.3.2 查询执行过程没有容错机制27
2.3.3 查询执行时报错exceeding
   memory limits27
2.3.4 无法动态增删改或加载数据
   目录与UDF28
2.3.5 查询执行结果必须经集群协调节
   点返回28
2.3.6 不支持低延迟、高并发28
2.4 Presto与Trino的项目与版本
  选择30
2.4.1 Trino与Presto选择哪个30
2.4.2 本书为什么用Trino的v350
   版本来做介绍31
2.4.3 Presto项目源码结构32
2.5 编译与运行Presto源码34
2.5.1 环境准备34
2.5.2 下载源码并载入IDEA35
2.5.3 编译Presto源码36
2.5.4 标记Antlr4自动生成的代码
   为generated source36
2.5.5 在IDEA中运行3个节点的
   Presto集群38
2.5.6 运行Presto命令行工具44
2.5.7 调试Presto源码常见问题44
2.6 基于Presto的数据仓库及本书
  常用SQL46
2.6.1 数据仓库介绍46
2.6.2 TPC-DS Data Model数据
   模型介绍47
2.6.3 本书常用SQL49
2.6.4 在哪里执行本节介绍的SQL54
2.7 总结、思考、实践54
第二篇 核心原理
第3章 分布式查询执行的整体流程56
3.1 分布式OLAP引擎整体架构及
   查询执行原理56
3.2 分布式查询执行的整体介绍58
3.2.1 从分布式架构看SQL查询
   的执行流程58
3.2.2 从功能模块看SQL执行流程58
3.2.3 原理讲解涉及的案例介绍59
3.3 查询的接收、解析与提交60
3.3.1 接收SQL查询请求60
3.3.2 词法与语法分析并生成抽象
   语法树62
3.3.3 创建并提交QueryExecution63
3.4 执行计划的生成与优化64
3.4.1 语义分析,生成执行计划64
3.4.2 优化执行计划,生成优化后
   的执行计划65
3.4.3 将逻辑执行计划树拆分为
   多棵子树68
3.5 执行计划的调度69
3.5.1 创建SqlStageExecution69
3.5.2 调度并分发HttpRemoteTask72
3.6 执行计划的执行78
3.6.1 在多个查询执行节点上执行
   任务78
3.6.2 分批返回查询计算结果给
   SQL客户端85
3.7 总结、思考、实践87
第4章 查询引擎核心模块拆解88
4.1 执行计划生成的设计实现88
4.1.1 从SQL到抽象语法树88
4.1.2 语义分析95
4.1.3 生成初始逻辑执行计划101
4.2 执行计划优化的目的、基本
  原理和基础算法106
4.2.1 执行计划优化的目的106
4.2.2 执行计划优化的基本原理106
4.2.3 执行计划优化的基础算法110
4.3 执行计划优化的设计实现115
4.3.1 执行计划优化的工作流程115
4.3.2 非迭代式优化器和迭代式
   优化器118
4.4 总结、思考、实践125
第三篇 经典SQL
第5章 数据过滤与投影相关查询
    的执行原理解析128
5.1 SQL-01简单拉取数据查询的
   实现原理128
5.1.1 执行计划的生成与优化128
5.1.2 分布式调度与执行的设计实现130
5.2 SQL-02数据过滤与投影查询的
  实现原理134
5.2.1 执行计划的生成与优化134
5.2.2 分布式调度与执行的设计实现136
5.3 数据过滤与投影相关查询涉及
  的查询优化147
5.3.1 列裁剪147
5.3.2 部分计算下推到存储服务148
5.3.3 表达式计算的优化150
5.4 总结、思考、实践151
第6章 行数限定与排序相关
    查询的执行原理解析153
6.1 SQL-10行数限定查询的实现
  原理153
6.1.1 执行计划的生成与优化154
6.1.2 分布式调度与执行的设计
   实现155
6.2 SQL-11 排序查询的实现原理158
6.2.1 执行计划的生成与优化158
6.2.2 分布式调度与执行的设计实现160
6.3 SQL-12 排序与行数限定组合
  查询的实现原理174
6.3.1 执行计划的生成与优化174
6.3.2 分布式调度与执行的设计实现176
6.4 简单SELECT查询相关的查询
  优化191
6.4.1 将LIMIT计算下推到数据
   源连接器191
6.4.2 去除不需要的LIMIT计算192
6.5 总结、思考、实践193
第7章 简单聚合查询的执行原理
    解析194
7.1 聚合查询原理通识性介绍194
7.1.1 常见的聚合查询194
7.1.2 聚合查询是有状态计算196
7.1.3 实现分布式聚合的几种执行
   模型196
7.1.4 Presto对聚合查询的设计与
   抽象197
7.2 SQL-20不分组聚合查询的实现
   原理198
7.2.1 执行计划的生成与优化198
7.2.2 分布式调度与执行的设计实现201
7.2.3 使用Scatter-Gather执行模型
   实现SQL-20211
7.3 SQL-21分组聚合查询的实现原理212
7.3.1 执行计划的生成与优化213
7.3.2 分布式调度与执行的设计实现214
7.3.3 使用Scatter-Gather执行模型
   实现SQL-21236
7.3.4 总结237
7.4 聚合函数的设计与实现238
7.5 总结、思考、实践240
第8章 复杂聚合查询的执行原理
    解析242
8.1 SQL-22去重计数查询的实现
  原理242
8.1.1 执行计划的生成与优化243
8.1.2 分布式调度与执行的设计实现246
8.1.3 使用Scatter-Gather执行模型
   实现SQL-22247
8.1.4 总结248
8.2 SQL-23多个聚合计算查询的
   实现原理248
8.2.1 执行计划的生成与优化249
8.2.2 分布式调度与执行的设计实现252
8.2.3 为什么Presto要引入MarkDistinct
   优化258
8.2.4 使用Scatter-Gather执行模型
   实现SQL-23260
8.3 SQL-30综合多种计算查询的
   实现原理260
8.3.1 执行计划的生成与优化261
8.3.2 分布式调度与执行的设计实现264
8.3.3 使用Scatter-Gather执行模型
   实现SQL-30265
8.3.4 总结266
8.4 常见聚合查询优化手段与优化器267
8.4.1 将聚合操作拆分为部分聚合与
   最终聚合267
8.4.2 在上下游任务中传播哈希聚合
   分组列的哈希值267
8.4.3 部分聚合计算下推268
8.4.4 将ORDER BY与LIMI T计算
   优化为TopN计算268
8.4.5 基于代价评估的方式来决定
   如何选择执行模型268
8.4.6 利用存储的数据分布特性做
   优化269
8.5 总结、思考、实践270
第四篇 数据交换机制
第9章 数据交换在查询规划、
    调度、执行中的基本原理272
9.1 数据交换机制简介272
9.1.1 数据交换是什么272
9.1.2 何时需要做数据交换273
9.1.3 数据交换是拉取模型274
9.1.4 任务之间数据交换与任务内部
   数据交换275
9.1.5 数据交换的代价276
9.2 查询优化阶段任务之间数据交换
   的设计实现276
9.2.1 任务之间数据交换的3个
   阶段276
9.2.2 ExchangeNode的实现277
9.2.3 利用AddExchanges优化器
   插入ExchangeNode282
9.2.4 AddExchanges决策在哪里
   插入ExchangeNode的主要
   考虑因素284
9.2.5 AddExchanges优化器的设计思路
   与案例285
9.2.6 拆分PlanFragment296
9.3 查询调度与执行阶段的整体设计
   思路297
9.3.1 在分布式查询集群中唯一确定
   某个任务297
9.3.2 每个任务的上游和下游298
9.3.3 交付上游任务产出的数据298
9.3.4 上下游任务数据交换的交互
   机制300
9.3.5 上下游任务生产与消费的速度301
9.4 总结、思考、实践301
第10章 数据交换在查询调度与
     执行中的详细设计302
10.1 查询调度阶段任务之间数据
   交换的设计实现302
10.1.1 调度部分整体介绍302
10.1.2 建立相邻上下游查询执行
    阶段间的数据依赖关系303
10.1.3 RemoteTask中与任务之间
    数据交换相关的抽象设计308
10.2 查询执行阶段任务之间数据交换
   上游的设计实现309
10.2.1 整体概述309
10.2.2 OutputBuffer的工作流程309
10.2.3 不同的OutputBuffer具体实现313
10.2.4 两种OutputOperator315
10.3 查询执行阶段任务之间数据交换
   下游的设计实现315
10.3.1 整体概述315
10.3.2 两种用于拉取上游任务数据
    的SourceOperator316
10.4 上下游任务之间数据交换的RPC
   交互机制321
10.4.1 数据交换的RPC通信协议321
10.4.2 SerializedPage的序列化
     格式323
10.5 任务内部数据交换的基本原理324
10.6 利用数据交换能力实现的特殊
   功能326
10.6.1 利用数据交换能力在查询执行
    路径实现的反压机制326
10.6.2 利用数据交换能力实现部分
    SQL的LIMIT语义328
10.6.3 任务之间数据交换交互中的
    乱序请求328
10.6.4 分批计算与返回执行结果329
10.7 总结、思考、实践330
第五篇 插件体系与连接器
第11章 连接器插件体系详解334
11.1 插件体系整体介绍334
11.1.1 插件概述335
11.1.2 插件分类335
11.1.3 SPI机制337
11.2 插件加载机制341
11.2.1 插件初始化流程入口341
11.2.2 插件加载343
11.2.3 插件整合346
11.2.4 类加载原理347
11.3 连接器实现原理351
11.3.1 连接器概述351
11.3.2 连接器插件实例化353
11.3.3 元数据模块359
11.3.4 数据读取366
11.3.5 部分计算下推371
11.3.6 连接器在查询执行中的作用374
11.4 关于连接器的一些深入思考375
11.4.1 使用连接器的注意事项376
11.4.2 站在OLAP引擎设计者视角来
    理解连接器的设计范式376
11.5 总结、思考、实践377
第12章 连接器开发实践:以Example-
    HTTP连接器为例378
12.1 Example-HTTP连接器基本介绍379
12.2 基础代码380
12.2.1 ExamplePlugin380
12.2.2 ExampleConfig380
12.2.3 ExampleModule381
12.2.4 ExampleConnector382
12.2.5 ExampleConnectorFactory383
12.3 元数据模块385
12.3.1 ExampleClient386
12.3.2 ExampleTable387
12.4 自定义句柄387
12.5 划分分片388
12.6 读取分片389
12.7 实现与连接器交互的HTTP
   数据源392
12.7.1 定义元数据接口393
12.7.2 定义数据接口394
12.7.3 Example-HTTP数据源的代码
    实现示例395
12.7.4 在Presto跑通Example-HTTP
    数据源的查询396
12.8 总结、思考、实践398
第六篇 函数原理与开发
第13章 函数的执行原理402
13.1 函数体系总览402
13.1.1 函数分类403
13.1.2 函数的生命周期403
13.1.3 函数开发的几种途径404
13.1.4 MethodHandle407
13.1.5 入门函数体系知识的学习思路408
13.2 函数的基本构成409
13.2.1 函数管理409
13.2.2 函数元数据410
13.2.3 函数签名411
13.2.4 泛型变量412
13.2.5 字面量变量414
13.2.6 自动注入的参数415
13.3 函数相关的主要流程415
13.3.1 引擎启动时的函数注册415
13.3.2 查询执行时的函数解析416
13.3.3 查询执行时的函数调用418
13.4 总结、思考、实践419
第14章 自定义函数开发实践421
14.1 标量函数开发方法421
14.1.1 注解框架422
14.1.2 底层开发428
14.2 聚合函数开发实践433
14.2.1 实现聚合函数的核心原理433
14.2.2 注解框架435
14.2.3 底层开发436
14.3 总结、思考、实践444
內容試閱
前 言 Preface
为什么要写这本书
在大数据时代,OLAP引擎作为处理海量数据的关键技术,其复杂性和技术深度要求我们不断学习和探索。然而,市面上关于OLAP引擎的资料大多数都是分散且难以系统化理解的。本书试图通过梳理OLAP引擎的设计哲学、架构原理、查询执行机制以及优化策略,为读者提供一个清晰的学习路径。
20世纪90年代末,OLAP起源于传统数据库,一直未有起色,2006年后经过近5年的发展,产生了一门新的技术——OLAP大数据分析引擎(简称OLAP引擎)。OLAP结合大数据得以蓬勃发展,在大型互联网公司占据了极其重要的地位,诸如Presto、Impala、Druid、Elasticsearch、Kylin、阿里云AnalyticDB等产品层出不穷,这也是它们最辉煌的时代。由Facebook开源的Presto是其中的佼佼者,它是以MPP为架构的OLAP引擎中的中流砥柱。如果你学习过Spark、Flink的源码,会惊喜地发现,其中的多个设计思路和实现都参考了Presto,甚至于2019年在北京召开的Flink Forward大会上介绍Flink OLAP发展方向时,对比的对象都是Presto。无论是在Facebook、Amazon、Uber、Twitter,还是在腾讯、阿里、京东、美团、滴滴,都可以见到Presto,由此可见Presto在大数据领域的影响力。
OLAP引擎底层技术中有很多数据库相关的知识点和优化技术,有些实现甚至是对数据库技术的直接借鉴和模仿。所以,我们以Presto为例来学习数据库知识,了解OLAP引擎底层技术。但是,仅看Presto源码是不够的,还需要上升到理论,再用理论指导实践,这样才能够完全看懂和理解Presto的代码。当然,笔者并不是建议大家在开始阶段就使劲学习理论,这样容易导致大家感觉自己看懂了,实际上还是不懂。
基于以上背景,笔者构思了本书的内容,从OLAP引擎的技术与挑战开题,先讲基本原理和使用方法,再以Presto源码为例由浅入深分析OLAP引擎设计方法。本书详细拆解了OLAP引擎中的SQL解析器、优化器、调度器、执行器这几个核心组件,并将内容扩展到OLAP引擎的高性能优化方案上。笔者希望通过本书,让正在苦苦学习大数据OLAP与SQL却找不到切入点或者方向的你,迅速提升专业能力。
为什么能写这本书
作为在大数据领域深耕超过十年的技术实践者,我们有幸参与了多个OLAP引擎的设计、开发和优化工作。这些宝贵的一线经验,加上对相关技术的深入研究,使我们具备了撰写本书的能力和信心。同时,笔者能够把复杂的技术问题拆解成读者可循序渐进地学习的内容,站在读者的视角来讲解OLAP引擎相关技术。此外笔者还花数年时间翻阅了国内外所有与OLAP引擎相关的技术书籍(不仅是Presto技术相关的书籍)。我们希望能够将所有OLAP领域的知识深入浅出地分享给更多的读者,推动这一领域的交流与发展。
什么人要读这本书
本书适合对OLAP引擎感兴趣的技术人员阅读。如果你是数据库开发者、数据架构师、大数据工程师,或者是对分布式计算和SQL引擎感兴趣的学生、研究人员,本书将为你提供宝贵的知识和经验。无论是希望在现有OLAP产品的基础上进行二次开发,还是仅想了解OLAP引擎背后的技术原理,本书都将是你的理想选择。
如何阅读这本书
建议读者在阅读本书之前具备以下条件。
了解Java编程语言,尤其是Java 8及以上的Lambda表达式特性,了解Guice、Guava等常用库。
对OLAP概念有基本了解,对大数据领域的全景有基本认知。
会写常见的SQL,对基本语法(如投影、过滤、关联、聚合、开窗等语法)有实际编写经验。
熟悉Presto的使用,对官方文档的内容有一定了解,或者阅读过《Trino权威指南》。
有在生产环境中使用Presto或其他OLAP引擎的经验。
本书分为6篇,共14章。从OLAP核心概念出发,以Presto为例,从整体执行流程到不同SQL的执行原理都有介绍,力图把OLAP查询的核心流程以一种系统化的方式给读者讲清楚。
第一篇背景知识(第1章和第2章):
第1章从OLAP的定义出发,深入对比了多个流行的OLAP引擎,包括但不限于Hive、SparkSQL、FlinkSQL、ClickHouse等,分析它们在各个方面的优劣,并讨论OLAP引擎的技术发展趋势及如何选型。
第2章介绍了Presto相关的背景知识,对比Trino和Presto的区别,介绍如何编译、运行源码,并给出了后续贯穿全书的SQL代码。
第二篇核心原理(第3章和第4章):
第3章非常详细地串讲了SQL执行流程,从查询提交到语法分析、语义分析,再到执行计划生成、优化、拆分、调度和执行,目的是帮读者建立一个整体的认知框架,方便对后续内容的学习。
第4章详细介绍了执行计划的生成和优化,包括前置的语法分析、语义分析流程,以及执行计划的生成、优化原理。
第三篇经典SQL(第5~8章):对多种经典SQL的执行进行原理级解析。每一章对应了一类SQL,复杂度从前到后递增,包含投影、过滤、行数限定、排序以及多种聚合场景。对每一类SQL的解读都包括逻辑执行计划、优化器、物理计划(查询执行阶段划分)、调度与执行几个部分。
第四篇数据交换机制(第9章和第10章):
第9章从设计的角度出发,对整个交换机制进行详细介绍,并且从优化器的角度分析数据交换的设计方法,以及调度、执行过程的设计思路。
第10章主要介绍OLAP引擎的具体实现原理,包含调度阶段的任务依赖收集、上游数据输出节点的工作原理、下游拉取数据的RPC机制与流程,以及衍生的反压、LIMIT语义、乱序等问题。
第五篇插件体系与连接器(第11章和第12章):
第11章介绍了插件体系及其背后的SPI机制,还有插件加载流程和底层的类加载原理。连接器是底层数据源的抽象建模,本章重点分析连接器的构成、元数据模块、数据读取模块以及它在优化器中的作用。
第12章介绍了一个官方提供的实例连接器——Example-HTTP,它比较简单,但是可以帮助读者快速巩固连接器相关的知识。
第六篇函数原理与开发(第13章和第14章):
第13章首先从原理出发,分析了函数的构成,如泛型参数、字面量变量、自动注入参数等。然后介绍了函数注册流程、语义分析中的函数解析、函数调用等。
第14章从标量函数、聚合函数两方面入手,用多个实际案例来介绍高级API(注解框架)及低级API的底层开发方法。
如果大家希望深度掌握本书的内容,并做到对大数据分布式SQL计算引擎一通百通,笔者强烈建议大家做到以下几点。
多实践:搭建一套Presto测试集群。
边看源码边调试:在Java编译器中把Presto源码跑起来,并结合本书的内容调试源码。
多总结:尝试把本书的知识点画成脑图,形成自己的知识体系,并泛化到整个OLAP领域。
根据实际业务需求改写源码。
通过单元测试代码理解每个类:当你理解不了某个类或方法是做什么的,或不知如何使用时,可看一看与它对应的单元测试代码,里面有围绕它的使用方式展开的相对简单且不需要理解全局的代码。
阅读SIGMOD、VLDB、ICDE英文文献:SIGMOD、VLDB及ICDE是数据库方向的三大顶级会议。这些会议上发布的论文,能够引导我们更好地理解源码背后的理论以及最新发展趋势。虽然SIGMOD、VLDB及ICDE是数据库领域的顶级会议,但是因为数据库与OLAP没有绝对的分界线,所以数据库相关的很多技术与OLAP是重叠的。
本书以Presto为例进行讲解。Presto的代码写得非常精美,其中部分代码甚至完全不用修改就可以拿到项目中使用。Presto的部分代码抽象层级比较多,函数调用栈比较深,或者处理逻辑复杂,大家容易看着看着就懵了。对于这类代码,没必要希望一次就看懂。笔者建议至少反复看10次,先从大面着眼,再从细节着眼。
勘误支持
如果大家在阅读过程中发现有内容方面的错漏,欢迎进入腾讯问卷填写详细信息,链接为https://wj.qq.com/s2/14366431/e06c/。
大家可搜索并关注微信公众号“大道至简bigdata”,并回复“获取高英举联系方式”或“获取许一腾联系方式”与本书作者建立联系。添加本书作者微信后还会被拉进大数据技术交流群,大家一起讨论OLAP技术。
高英举
致谢一 Acknowledgements
在本书撰写过程中,我得到了许多人的帮助和支持。
首先,我要感谢我的家人,他们的理解和鼓励是我完成本书的最大动力。在创作之余我也享受到了Suwey和Annie带来的生活乐趣,还包括趴在沙发上陪伴我创作到深夜的团子。
其次要感谢将我引入大数据领域的前领导于邦旭、唐森金、张炎泼,在我最初工作的几年,他们帮助我在大数据技术领域快速成长。
还要隆重感谢与我一同创作本书的伙伴许一腾。我们一个在上海,一个在深圳,因在互联网上发布的Presto技术文章结识,之后共同创作本书历时4年有余,至今却从未谋面,基本都是通过定期的线上会议共同制定创作计划、交流技术、互相鼓励。我们一路走来遇到不少苦难,但是最终都没有放弃,一直坚持到了本书的出版。
在创作阶段我也广泛参考了一些优秀的作品,其中令我印象最深刻的是张晨的优化器原理相关的文章,经过他的同意我在本书中的对应章节借鉴了他的文章。
非常感谢Presto(Trino)的三位创始人Martin Traverso、DainSundstrom、David Phillips创造了如此优秀的开源项目,使我能够基于此开展多年的大数据相关的工作,并从中领略到分布式OLAP引擎的魅力。
感谢所有为开源社区贡献力量的开发者们,没有他们的辛勤工作,就没有本书中的丰富技术资源。
坚定的创作信念与对内容品质的极致要求是一本好书诞生的重要支撑。当我在2001年第一次开始阅读《科幻世界》时就被其中精彩的科幻故事与绘画吸引,其后更是惊叹于刘慈欣《三体》的恢弘。我在这里要特别感谢《科幻世界》杂志的创作人员、刘慈欣以及《流浪地球》的导演郭帆和其他所有剧组成员,是他们通过作品传递给我的精神使我更坚定了出版一本好书的信念,并追求将它的内容品质做到极致。
还要感谢近年迅速崛起的大模型产品——OpenAI的ChatGPT、月之暗面的KimiChat。在本书的创作过程中,我利用这些AI工具润色每章的开篇引言以及结尾总结,其出色的理解与总结能力使我惊叹,它们显著提高了我的创作效率。
还有一群人值得我特别感谢,他们在我的知乎技术专栏以及微信中留下了宝贵的建议并提供了正面鼓励的情绪价值,他们是我进行技术分享的种子读者,是他们激发了我将多年技术积累写成书,从而实现技术传承的热情。
最后,感谢所有选择阅读本书的读者,希望本书能成为你们在OLAP引擎学习道路上的美好伴侣。
高英举

致谢二 Acknowledgements
首先要感谢腾讯的老领导王汪给了我一个难得的机会,让我以一种特别的方式进入了大数据引擎开发的世界。引擎研发的魅力和挑战对我来说是前所未有的,从零开始阅读源码需要极大的毅力和耐心,这一路上感谢吴植鹏等同事的支持与帮助。
写一本好书是件非常高尚的事情,也是不断提升自我修养的过程。这里必须感谢本书的另一位作者高英举,我们并肩作战多年。本书虽然写完了,但是技术写作之路才刚刚开始。
写书之路漫漫,在这个过程中离不开家人的支持。我已不知有多少个周末妻子带着宝宝出去玩,特地让我留在家里写书。感谢妻子的默默付出。
最后要感谢开源社区,没有开源社区所有成员的努力,我们就无法接触到这么优秀的项目,自然也不会有繁荣的Trino/Presto社区。开源使所有软件从业人员能够公平、透明、系统地学习复杂系统,让我们能够站在巨人的肩膀上,甚至能够成为另一个巨人。
许一腾

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 台灣用户 | 香港/海外用户
megBook.com.tw
Copyright (C) 2013 - 2025 (香港)大書城有限公司 All Rights Reserved.