新書推薦:
《
笔记启蒙 : 英国皇家学会与科学革命
》
售價:HK$
85.8
《
汉语副词研究论集(第六辑)
》
售價:HK$
107.8
《
干戈之影:商代的战争观念、武装者与武器装备
》
售價:HK$
74.8
《
镶嵌之美:古希腊罗马的马赛克艺术
》
售價:HK$
305.8
《
后希腊化哲学:从斯多亚学派到奥利金的发展研究
》
售價:HK$
76.8
《
别纠结啦:不被情绪牵着走的通透生活指南(“当代一休”小池龙之介治愈新作!附赠精美书签!)
》
售價:HK$
64.9
《
第二人生:找到重新定义人生的智慧
》
售價:HK$
96.8
《
唐朝三百年
》
售價:HK$
107.8
|
編輯推薦: |
(1)作者经验丰富:作者是滴普科技合伙人兼首席架构师,在ClickHouse方面积累了大量的实战经验。
(2)重在授人以渔:通过剖析ClickHouse底层引擎的架构设计来解密ClickHouse高性能背后的底层逻辑。
(3)同时授人以渔:结合ClickHouse的应用场景,总结了大量的使用技巧和性能优化方法。
(4)近10位专家联袂推荐:滴普科技联合创始人杨磊、京东云数据库研发负责人高新刚、ClickHouse 中国社区创始人郭炜等近10位专家强烈推荐。
|
內容簡介: |
这是一本通过分析ClickHouse底层引擎架构来解读ClickHouse极致性能的底层逻辑的著作,同时还总结了ClickHouse在各种适用场景中的使用技巧和性能调优方法,让读者知其然,也能知其所以然。
全书一共12章,分为两个部分:
第1部分 架构篇(第1-7章)简要地介绍了数据仓库的核心技术和思路,系统讲解了ClickHouse的查询性能优势、适用场景、架构设计和运作过程,深入地剖析了ClickHouse的存储引擎架构、计算引擎架构以及决定ClickHouse性能的关键因素,还将ClickHouse与其他数仓架构进行了深度对比,不仅阐明了ClickHouse查询速度快的底层逻辑,也推导出了ClickHouse的适用场景。
第2部分 实战篇(第8-12章)针对ClickHouse的适用场景,讲解了它的各种使用技巧以及存算分离架构、分布式架构等云计算时代的全新架构,更重要的是,从数据结构、内存、磁盘、网络、CPU、查询等方面全面总结了ClickHouse的性能优化方法和原则。
|
關於作者: |
陈峰
资深大数据专家和架构师,ClickHouse技术专家,滴普科技(2B领域独角兽)合伙人兼首席架构师,从0到1地建设了首支滴普科技的数据中台技术团队,构建了滴普科技的数据技术体系。
有多年的大数据架构经验,作者曾担任百丽数据中台丽影洞察项目的大数据架构师,将ClickHouse成功引入百丽。
曾在中国数据库技术大会(Database Technology Conference China,DTCC)等多个会议上发表ClickHouse主题演讲,对ClickHouse有非常深入的研究,实践经验丰富。
积极参与ClickHouse社区活动,积极推广ClickHouse。在多个项目中应用ClickHouse技术,将ClickHouse的强大能力推广到企业中,同时积极地向ClickHouse社区贡献代码和开源工具。
|
目錄:
|
赞誉
序1
序2
自序
前言
第一部分 架构篇
第1章 数据仓库的核心技术 3
1.1 OLAP和OLTP的本质区别 4
1.1.1 数据三范式 4
1.1.2 规范化的意义 6
1.1.3 规范化的局限 7
1.1.4 数仓建模的本质 7
1.1.5 OLAP和OLTP的底层数据模型 8
1.1.6 维度建模 8
1.2 典型大数据数仓技术及其核心思路 10
1.2.1 Hive 10
1.2.2 HBase 11
1.2.3 Kylin 12
1.2.4 其他数仓 13
1.3 传统数仓的缺陷 13
1.3.1 效率低 13
1.3.2 延迟高 14
1.3.3 成本高 14
1.4 ClickHouse查询性能的优势 15
1.4.1 向量化引擎 15
1.4.2 高效的数据压缩 16
1.4.3 高效的I/O优化 17
1.5 本章小结 18
第2章 ClickHouse简介 19
2.1 ClickHouse的4个标签 19
2.1.1 性能强大 19
2.1.2 单机处理能力强 20
2.1.3 成本低 21
2.1.4 不支持事务 21
2.2 ClickHouse的3个适用场景 22
2.2.1 BI报表的交互式分析 22
2.2.2 互联网日志分析 22
2.2.3 广告营销 23
2.3 本章小结 24
第3章 ClickHouse架构概览 25
3.1 ClickHouse架构简介 26
3.2 ClickHouse的核心抽象 27
3.2.1 列和字段 27
3.2.2 数据类型 28
3.2.3 块 32
3.2.4 表 33
3.3 ClickHouse的运作过程 35
3.3.1 数据插入过程 35
3.3.2 数据查询过程 35
3.3.3 数据更新和数据删除过程 36
3.4 本章小结 37
第4章 MergeTree存储引擎架构 39
4.1 MergeTree存储引擎的三大特点 40
4.2 MergeTree的数据组织 41
4.2.1 块 41
4.2.2 数据堆放方式 41
4.3 MergeTree的文件组织 43
4.3.1 数据文件、元数据文件、索引文件和其他文件 45
4.3.2 分区 47
4.3.3 数据库和表 48
4.4 索引 49
4.4.1 主键索引 49
4.4.2 标记 49
4.5 与事务数据库存储引擎的对比 50
4.6 存储引擎如何影响查询速度 52
4.6.1 预排序 52
4.6.2 列存 52
4.6.3 压缩 53
4.7 MergeTree存储引擎的工作过程 53
4.7.1 数据库、数据表的创建过程 54
4.7.2 数据插入过程 54
4.7.3 分区合并和删除过程 54
4.7.4 数据读取过程 56
4.8 本章小结 59
第5章 ClickHouse计算引擎架构 61
5.1 ClickHouse计算引擎的架构简介与设计思想 61
5.1.1 整体架构 62
5.1.2 SQL解析器 62
5.1.3 解释器 63
5.1.4 执行器 63
5.1.5 设计思想 64
5.2 火山模型 65
5.2.1 火山模型概述 65
5.2.2 火山模型的原理 66
5.2.3 火山模型的优点与缺点 67
5.3 向量化引擎 67
5.3.1 向量化引擎的实现方式 68
5.3.2 ClickHouse中的向量化算子 69
5.3.3 向量化引擎的前提 70
5.4 计算引擎如何影响查询速度 72
5.4.1 ClickHouse查询速度快的前提 72
5.4.2 ClickHouse查询速度快的本质 74
5.5 本章小结 74
第6章 ClickHouse与其他数仓架构的对比 75
6.1 ClickHouse与Hive的对比 75
6.1.1 Hive的数据文件 76
6.1.2 Hive的存储系统 82
6.1.3 Hive计算引擎与ClickHouse计算引擎的差异 84
6.1.4 ClickHouse比Hive查询速度快的原因 85
6.2 ClickHouse与HBase的对比 86
6.2.1 HBase的数据模型 86
6.2.2 HBase的存储系统与ClickHouse的异同 87
6.2.3 HBase的适用场景及ClickHouse不适合的原因 87
6.3 ClickHouse与Kylin的对比 88
6.3.1 Kylin的架构 88
6.3.2 Kylin解决性能问题的思路 88
6.3.3 Kylin方案的缺陷 89
6.3.4 ClickHouse的方案 89
6.4 本章小结 91
第7章 深度思考:决定外在能力的因素 93
7.1 从架构层面分析ClickHouse 93
7.1.1 ClickHouse速度快的前提 93
7.1.2 对ClickHouse的一些误解 94
7.2 结构决定功能 95
7.2.1 方法论 96
7.2.2 意义 97
7.2.3 不要过度设计 98
7.3 从ClickHouse的设计来理解 99
7.3.1 结构决定能力的上限 99
7.3.2 结构决定应用层算法 99
7.4 本章小结 100
第二部分 实战篇
第8章 ClickHouse使用技巧 105
8.1 数据导入、导出技巧 105
8.1.1 外部文件导入、导出技巧 105
8.1.2 灵活使用集成表引擎导入、导出数据 109
8.2 建表技巧 117
8.2.1 表引擎选择技巧 118
8.2.2 分区键选择技巧 120
8.2.3 数据结构选择技巧 120
8.2.4 分区技巧 121
8.3 高级技巧 121
8.3.1 物化视图 121
8.3.2 投影 122
8.3.3 位图 122
8.3.4 变更数据捕获 123
8.4 常见报错及处理方法 123
8.5 本章小结 124
第9章 ClickHouse实现用户画像系统 125
9.1 用户画像概述 125
9.1.1 用户画像系统介绍 125
9.1.2 用户画像系统的需求描述 127
9.1.3 用户画像系统的需求分析 127
9.1.4 用户画像系统的架构 128
9.2 用户画像系统的关键技术实现 129
9.2.1 技术选型 129
9.2.2 分析阶段 130
9.2.3 运营阶段 136
9.3 基于ClickHouse的用户画像系统的优点 137
9.4 本章小结 139
第10章 ClickHouse的存算分离架构 141
10.1 存算分离架构背景 141
10.1.1 相关概述 141
10.1.2 存算分离的典型架构 142
10.1.3 存算分离的意义 143
10.1.4 存算分离的局限 145
10.2 ClickHouse中的存算分离 147
10.2.1 实现方式 147
10.2.2 注意事项 150
10.3 存算分离架构给ClickHouse带来的优势 151
10.4 本章小结 152
第11章 ClickHouse的分布式架构 153
11.1 架构特点及对比 153
11.1.1 ClickHouse分布式架构的优点 154
11.1.2 ClickHouse分布式架构的缺点 155
11.1.3 ClickHouse与Hadoop的分布式架构对比 156
11.2 基本概念 156
11.2.1 集群 157
11.2.2 副本 158
11.2.3 分片 159
11.3 ClickHouse的复制表引擎 160
11.3.1 创建复制表 160
11.3.2 复制表复制 161
11.3.3 复制表查询 161
11.4 ClickHouse分布式表引擎 162
11.4.1 创建分布式表 162
11.4.2 分布式表查询原理 163
11.4.3 分布式表的数据写入方案 165
11.4.4 分布式表中副本的处理方式 165
11.5 本章小结 166
第12章 ClickHouse性能优化 167
12.1 性能优化的原则 167
12.2 数据结构优化 168
12.3 内存优化 171
12.4 磁盘优化 171
12.5 网络优化 173
12.6 CPU优化 173
12.7 查询优化 174
12.8 数据迁移优化 176
12.9 本章小结 177
|
內容試閱:
|
为什么要写这本书
2021年,一次从深圳到上海的航班上,我和同事讨论到了客户的需求。同事反馈:客户抱怨现有的Hive数据仓库开发一个指标的周期太长,客户提出一个想法后,需要很久才能得到数据,严重降低了客户的决策效率。我自信地向同事推荐了ClickHouse—ClickHouse正好可以用来应对这类数据探索的场景。我满心欢喜地认为这个客户的需求得到了圆满的解决,然而墨菲定律再一次发挥了它强大的威力。
几周后,这位同事急吼吼地找到了我:“峰少,ClickHouse不行啊,查询速度要20多秒,离客户的1秒预期差太多了。”我的第一反应是不可能,就客户的数据量来说,再差也不会超过3秒。随即我意识到,一定是优化没有做到位。于是我开始了解同事先前的工作。
通过调研,我发现同事是在做一些加索引、合并ODS表的操作,这些操作的确将ClickHouse的速度提升了几个数量级,但是依然有着近20秒的差距。这个差距,通过索引、分区等手段是解决不了的。这让我意识到,需要从ClickHouse的底层引擎出发。最终我只是修改了其中一个数仓表的主键顺序,就成功地将查询速度从20秒优化到了100毫秒,远超客户的预期。
这个事件促使我有了写书的想法。的确,ClickHouse以速度快闻名,但事实上这是建立在对ClickHouse的底层引擎有着深度认知的基础上的。如果还是以传统数仓的方式对ClickHouse调优,就无法充分发挥ClickHouse的性能优势。
ClickHouse是数仓中的另类,为了充分发挥单机优势,放弃了很多传统数仓习以为常的设计。这导致了ClickHouse和当前的主流数仓不同的适用场景和调优方式,也给目前的数仓从业者带来了挑战:传统的调优方式无法在ClickHouse上达到极致的效果,需要对ClickHouse底层引擎有更全面的了解,并同时理解一套全新的调优的方法论。
当然,对于大部分大数据工程师来说,只需要了解ClickHouse的调优方法论。但我的很多同事在了解了ClickHouse调优的套路之后,对ClickHouse的神奇特性产生了好奇:为何更换一下位置就能将性能提升这么多?要理解这个问题,就需要对ClickHouse的底层引擎有深入了解。我写这本书,就是希望能够系统地将ClickHouse的底层引擎分析透彻,从而帮助读者知其然,更能知其所以然。
读者对象
我在写作时尽量避免解读ClickHouse源码,更注重分析ClickHouse背后的思想。因为我认为源码是思想的外在体现,同样的思想,不同的开发者在实现时会有不同的代码逻辑,所以核心在于背后的思想而不是代码的实现。本书面向的读者不仅仅是ClickHouse的C 源码开发工程师,还包括以下读者:
ClickHouse初学者及爱好者
软件架构师
系统架构师
ClickHouse开发者
数仓建模师
大数据工程师
ClickHouse运维工程师
中高级开发工程师
本书特色
本书从架构设计的层面揭示了ClickHouse查询速度快的根本原因。读者阅读本书后,能够深刻理解ClickHouse的适用场景,能够客观地认识ClickHouse并形成自己的认知,为今后在实际业务中充分发挥ClickHouse的性能提供坚实的基础。
在思想内核上,本书分为明线和暗线。明线是ClickHouse为什么查询速度快,暗线是在此基础上向读者揭示更高维度的“架构如何影响功能(能力)”这个问题,从而帮助读者在潜移默化中构建架构世界观。
如何阅读本书
本书分为两部分。
第一部分 架构篇(第1~7章),介绍ClickHouse的架构,并从架构的角度分析ClickHouse查询速度快的底层逻辑。任何架构都不可能适用于所有的场景,这部分会基于这个逻辑推导出ClickHouse的适用场景。
第二部分 实战篇(第8~12章),向读者展示ClickHouse的使用技巧、真实场景下ClickHouse如何建模、云计算时代ClickHouse的全新架构和性能优化等内容。
勘误和支持
由于作者的水平有限,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,我开通了一个微信订阅号“峰少的技术空间”,读者关注后可以直接给我留言,反馈意见和建议,我会及时与大家在线交流。
书中的全部源文件可以通过以下链接下载,我也会及时更新相应的功能。
前端代码源文件链接为https://github.com/Wen-ace/frontend_project_user_profile_with_high_performance_of_clickhouse。
后端代码源文件链接为https://github.com/chen-ace/project_user_profile_with_hign_performance_of_clickhouse。
如果读者有更多的宝贵意见,也欢迎发送邮件至邮箱cfcz48@qq.com。期待能够得到你们的真挚反馈。
致谢
感谢我的恩师—南京大学胡昊教授。正是胡老师当年对我的教导,才让我有了求真探索的精神和看透表象的逻辑洞察力,也让我具备了写出这本书的能力。感谢我的恩师为本书作序。
感谢云和恩墨创始人、鲲鹏MVP盖国强老师,盖老师在数据库行业的经验非常丰富,重视提携新人,感谢盖国强老师为本书作序。
感谢我的伯乐杨磊,杨磊先生从微末中发现了我,带我进入更大的平台,给了我一个可以自由挥洒才华的舞台,是杨磊先生提高了我的视野,让我能够从不同的角度去分析问题。同时感谢杨磊先生为本书编写推荐语。
感谢我的公司滴普科技及公司的领导赵杰辉、王兵、吴小前、吕鑫。是公司给我创造了写作的条件,并给我提供了实践项目。没有公司和领导们的支持,就不会有这本书的出版。
感谢京东云数据库研发负责人高新刚、ClickHouse中国社区创始人郭炜、美创科技技术研究院数据库内核专家吕海波、StarRocks社区活跃贡献者徐昱、中国科学院软件研究所工程师温一川、中亦科技数据库产品副总经理陈宏义(老猫)、南京大学助理研究员匡宏宇博士。很荣幸本书能得到这些同行和前辈的认可。感谢你们对我的支持,为本书写推荐语。我将不断前行,输出更多优质的内容。
感谢我的同事:曹源、郑聪聪、温荣蛟、徐业洲、钱思贝、温志强、赵宇凯、刘晶、简婉晴。感谢你们为本书的创作提供了支撑。特别感谢温荣蛟先生,为第9章提供了前端代码。
感谢我的父亲陈志中。他是一个淳朴的物流司机,不擅于表达,只知道一心一意支持我,对于我求学路上的要求,从来都不打折扣地满足。也正是父亲对我的无私支持,才让我能够专心求学,最终写出了这本书。
最后感谢党和祖国,让我这个农村出身的孩子能够通过教育改变自己的命运。愿祖国繁荣昌盛。
谨以此书献给我的父亲和兄弟们,以及众多热爱ClickHouse的朋友们!
|
|