這是一本可幫助讀者深度理解並全面掌握ClickHouse運行原理並進行實踐開發的工具書,涵蓋了ClickHouse的時代背景、發展歷程、核心概念、基礎功能、運行原理、實踐指導等多個維度的內容,尤其是在ClickHouse最核心的部分——MergeTree表引擎與分散式方面,書中對其實現原理和應用技巧進行了詳細解讀。
本書採用淺顯易懂的語言+大量演示案例+大量示意圖例的形式呈現,以求讓讀者在最短的時間內,以最舒服的方式,獲得最核心的知識。本書的理論觀點來自作者在OLAP領域10餘年的工作思考與總結;功能與實操的素材來自作者在工作中對ClickHouse的深度應用與實踐;原理解析部分的素材來自對大量專業文獻的鑽研與源碼級的調試與解讀。
本書在邏輯上分為三大部分:
第1~2章從宏觀的角度出發,描述了時代背景、ClickHouse的發展歷程及其核心特點。其中,對MOLAP、ROLAP和HOLAP三種架構形態的優缺點進行了詳細解讀,對ClickHouse的發展歷程和架構形態進行了深度剖析,目的是説明讀者從根本上瞭解ClickHouse為什麼具有這麼高的性能。
第3~5章從實踐應用的角度出發,詳細介紹了ClickHouse基礎功能的使用方法和技巧,其中包括對資料庫、資料表、視圖、資料字典等重點功能的剖析和演示。
第6~11章從原理的角度出發,解析了ClickHouse核心功能的運行機理。重點介紹了六大類數十種表引擎的主要特點與使用方法。其中對MergeTree的原理進行了深度解析,對它的基礎資料結構、分區索引、一級索引、二級索引、壓縮資料塊、資料標記等重要概念進行瞭解讀;對副本與分片的運行原理也進行了詳細剖析;對它的基礎資料結構、分散式DDL、分散式協同的核心操作過程等進行瞭解讀。
作者介紹
朱凱
ClickHouse貢獻者之一,ClickHouse佈道者,資深架構師,騰訊雲*具價值專家TVP,開源愛好者,Apache DolphinScheduler Committer,《企業級大資料平臺構建:架構與實現》作者,公眾號“ClickHouse的秘密基地”運營者。
十多年IT從業經驗,對大資料領域主流技術與解決方案有深入研究,擅長分散式系統的架構設計與整合。曾主導過多款大資料平臺級產品的規劃、設計與研發工作,一線實戰經驗豐富。現就職於遠光軟體股份有限公司,任大資料事業部平臺開發部總經理。
ClickHouse貢獻者之一,ClickHouse佈道者,資深架構師,騰訊雲*具價值專家TVP,開源愛好者,Apache DolphinScheduler Committer,《企業級大資料平臺構建:架構與實現》作者,公眾號“ClickHouse的秘密基地”運營者。
十多年IT從業經驗,對大資料領域主流技術與解決方案有深入研究,擅長分散式系統的架構設計與整合。曾主導過多款大資料平臺級產品的規劃、設計與研發工作,一線實戰經驗豐富。現就職於遠光軟體股份有限公司,任大資料事業部平臺開發部總經理。
目錄
推薦序一
推薦序二
推薦序三
推薦序四
推薦序五
讚譽
前言
第1章 ClickHouse的前世今生1
1.1 傳統BI系統之殤2
1.2 現代BI系統的新思潮2
1.3 OLAP常見架構分類4
1.4 OLAP實現技術的演進6
1.5 一匹橫空出世的黑馬7
1.5.1 天下武功唯快不破8
1.5.2 社區活躍8
1.6 ClickHouse的發展歷程8
1.6.1 順理成章的MySQL時期9
1.6.2 另闢蹊徑的Metrage時期10
1.6.3 自我突破的OLAPServer時期10
1.6.4 水到渠成的ClickHouse時代11
1.7 ClickHouse的名稱含義12
1.8 ClickHouse適用的場景12
1.9 ClickHouse不適用的場景13
1.10 有誰在使用ClickHouse13
1.11 本章小結13
第2章 ClickHouse架構概述14
2.1 ClickHouse的核心特性14
2.1.1 完備的DBMS功能15
2.1.2 列式存儲與資料壓縮15
2.1.3 向量化執行引擎16
2.1.4 關係模型與SQL查詢17
2.1.5 多樣化的表引擎18
2.1.6 多執行緒與分散式18
2.1.7 多主架構19
2.1.8 線上查詢19
2.1.9 資料分片與分散式查詢 19
2.2 ClickHouse的架構設計20
2.2.1 Column與Field20
2.2.2 DataType20
2.2.3 Block與Block流21
2.2.4 Table22
2.2.5 Parser與Interpreter22
2.2.6 Functions 與Aggregate Functions22
2.2.7 Cluster與Replication23
2.3 ClickHouse為何如此之快24
2.3.1 著眼硬體,先想後做24
2.3.2 演算法在前,抽象在後24
2.3.3 勇於嘗鮮,不行就換25
2.3.4 特定場景,特殊優化25
2.3.5 持續測試,持續改進25
2.4 本章小結26
第3章 安裝與部署27
3.1 ClickHouse的安裝過程27
3.1.1 環境準備27
3.1.2 安裝ClickHouse28
3.2 用戶端的訪問介面31
3.2.1 CLI31
3.2.2 JDBC33
3.3 內置的實用工具35
3.3.1 clickhouse-local35
3.3.2 clickhouse-benchmark36
3.4 本章小結38
第4章 資料定義39
4.1 ClickHouse的資料類型39
4.1.1 基礎類型40
4.1.2 複合類型45
4.1.3 特殊類型48
4.2 如何定義資料表49
4.2.1 資料庫49
4.2.2 資料表50
4.2.3 預設值運算式52
4.2.4 臨時表53
4.2.5 分區表54
4.2.6 視圖55
4.3 資料表的基本操作56
4.3.1 追加新欄位56
4.3.2 修改資料類型56
4.3.3 修改備註56
4.3.4 刪除已有欄位57
4.3.5 移動資料表57
4.3.6 清空資料表58
4.4 資料分區的基本操作58
4.4.1 查詢分區資訊58
4.4.2 刪除指定分區58
4.4.3 複製分區資料59
4.4.4 重置分區數據60
4.4.5 卸載與裝載分區60
4.4.6 備份與還原分區61
4.5 分散式DDL執行61
4.6 資料的寫入61
4.7 資料的刪除與修改63
4.8 本章小結64
第5章 資料字典65
5.1 內置字典65
5.1.1 內置字典配置說明65
5.1.2 使用內置字典67
5.2 外部擴展字典67
5.2.1 準備字典資料67
5.2.2 擴展字典設定檔的元素組成68
5.2.3 擴展字典的資料結構69
5.2.4 擴展字典的類型71
5.2.5 擴展字典的資料來源79
5.2.6 擴展字典的資料更新策略84
5.2.7 擴展字典的基本操作85
5.3 本章小結87
第6章 MergeTree原理解析88
6.1 MergeTree的創建方式與存儲結構89
6.1.1 MergeTree的創建方式89
6.1.2 MergeTree的存儲結構91
6.2 數據分區93
6.2.1 資料的分區規則93
6.2.2 分區目錄的命名規則94
6.2.3 分區目錄的合併過程95
6.3 一級索引98
6.3.1 稀疏索引98
6.3.2 索引細微性99
6.3.3 索引資料的生成規則99
6.3.4 索引的查詢過程101
6.4 二級索引102
6.4.1 granularity與index_granularity的關係104
6.4.2 跳數索引的類型105
6.5 資料存儲106
6.5.1 各列獨立存儲106
6.5.2 壓縮資料塊106
6.6 資料標記109
6.6.1 資料標記的生成規則109
6.6.2 資料標記的工作方式110
6.7 對於分區、索引、標記和壓縮資料的協同總結113
6.7.1 寫入過程113
6.7.2 查詢過程114
6.7.3 資料標記與壓縮資料塊的對應關係114
6.8 本章小結116
第7章 MergeTree系清單引擎117
7.1 MergeTree117
7.1.1 數據TTL117
7.1.2 多路徑存儲策略121
7.2 ReplacingMergeTree128
7.3 SummingMergeTree130
7.4 AggregatingMergeTree134
7.5 CollapsingMergeTree137
7.6 VersionedCollapsingMergeTree140
7.7 各種MergeTree之間的關係總結141
7.7.1 繼承關係141
7.7.2 組合關係143
7.8 本章小結144
第8章 其他常見類型表引擎145
8.1 外部存儲類型145
8.1.1 HDFS145
8.1.2 MySQL149
8.1.3 JDBC150
8.1.4 Kafka152
8.1.5 File157
8.2 記憶體類型158
8.2.1 Memory159
8.2.2 Set159
8.2.3 Join160
8.2.4 Buffer162
8.3 日誌類型164
8.3.1 TinyLog164
8.3.2 StripeLog165
8.3.3 Log166
8.4 介面類別型167
8.4.1 Merge167
8.4.2 Dictionary168
8.4.3 Distributed169
8.5 其他類型170
8.5.1 Live View170
8.5.2 Null171
8.5.3 URL171
8.6 本章小結173
第9章 資料查詢174
9.1 WITH子句175
9.2 FROM子句177
9.3 SAMPLE子句178
9.4 ARRAY JOIN子句180
9.5 JOIN子句183
9.5.1 連接精度184
9.5.2 連接類型186
9.5.3 多表連接189
9.5.4 注意事項190
9.6 WHERE與PREWHERE子句190
9.7 GROUP BY子句193
9.7.1 WITH ROLLUP194
9.7.2 WITH CUBE194
9.7.3 WITH TOTALS195
9.8 HAVING子句195
9.9 ORDER BY子句197
9.10 LIMIT BY子句198
9.11 LIMIT子句199
9.12 SELECT子句200
9.13 DISTINCT子句200
9.14 UNION ALL子句202
9.15 查看SQL執行計畫203
9.16 本章小結207
第10章 副本與分片208
10.1 概述208
10.2 數據副本209
10.2.1 副本的特點212
10.2.2 ZooKeeper的配置方式212
10.2.3 副本的定義形式213
10.3 ReplicatedMergeTree原理解析214
10.3.1 資料結構215
10.3.2 副本協同的核心流程217
10.4 數據分片228
10.4.1 集群的配置方式228
10.4.2 基於集群實現分散式DDL232
10.5 Distributed原理解析236
10.5.1 定義形式236
10.5.2 查詢的分類237
10.5.3 分片規則238
10.5.4 分散式寫入的核心流程239
10.5.5 分散式查詢的核心流程245
10.6 本章小結251
第11章 管理與運維252
11.1 使用者配置252
11.1.1 用戶profile252
11.1.2 配置約束253
11.1.3 用戶定義254
11.2 許可權管理257
11.2.1 存取權限257
11.2.2 查詢許可權258
11.2.3 數據行級許可權259
11.3 熔斷機制261
11.4 資料備份263
11.4.1 匯出檔案備份263
11.4.2 通過快照表備份264
11.4.3 按分區備份264
11.5 服務監控265
11.5.1 系統表266
11.5.2 查詢日誌267
11.6 本章小結270
推薦序二
推薦序三
推薦序四
推薦序五
讚譽
前言
第1章 ClickHouse的前世今生1
1.1 傳統BI系統之殤2
1.2 現代BI系統的新思潮2
1.3 OLAP常見架構分類4
1.4 OLAP實現技術的演進6
1.5 一匹橫空出世的黑馬7
1.5.1 天下武功唯快不破8
1.5.2 社區活躍8
1.6 ClickHouse的發展歷程8
1.6.1 順理成章的MySQL時期9
1.6.2 另闢蹊徑的Metrage時期10
1.6.3 自我突破的OLAPServer時期10
1.6.4 水到渠成的ClickHouse時代11
1.7 ClickHouse的名稱含義12
1.8 ClickHouse適用的場景12
1.9 ClickHouse不適用的場景13
1.10 有誰在使用ClickHouse13
1.11 本章小結13
第2章 ClickHouse架構概述14
2.1 ClickHouse的核心特性14
2.1.1 完備的DBMS功能15
2.1.2 列式存儲與資料壓縮15
2.1.3 向量化執行引擎16
2.1.4 關係模型與SQL查詢17
2.1.5 多樣化的表引擎18
2.1.6 多執行緒與分散式18
2.1.7 多主架構19
2.1.8 線上查詢19
2.1.9 資料分片與分散式查詢 19
2.2 ClickHouse的架構設計20
2.2.1 Column與Field20
2.2.2 DataType20
2.2.3 Block與Block流21
2.2.4 Table22
2.2.5 Parser與Interpreter22
2.2.6 Functions 與Aggregate Functions22
2.2.7 Cluster與Replication23
2.3 ClickHouse為何如此之快24
2.3.1 著眼硬體,先想後做24
2.3.2 演算法在前,抽象在後24
2.3.3 勇於嘗鮮,不行就換25
2.3.4 特定場景,特殊優化25
2.3.5 持續測試,持續改進25
2.4 本章小結26
第3章 安裝與部署27
3.1 ClickHouse的安裝過程27
3.1.1 環境準備27
3.1.2 安裝ClickHouse28
3.2 用戶端的訪問介面31
3.2.1 CLI31
3.2.2 JDBC33
3.3 內置的實用工具35
3.3.1 clickhouse-local35
3.3.2 clickhouse-benchmark36
3.4 本章小結38
第4章 資料定義39
4.1 ClickHouse的資料類型39
4.1.1 基礎類型40
4.1.2 複合類型45
4.1.3 特殊類型48
4.2 如何定義資料表49
4.2.1 資料庫49
4.2.2 資料表50
4.2.3 預設值運算式52
4.2.4 臨時表53
4.2.5 分區表54
4.2.6 視圖55
4.3 資料表的基本操作56
4.3.1 追加新欄位56
4.3.2 修改資料類型56
4.3.3 修改備註56
4.3.4 刪除已有欄位57
4.3.5 移動資料表57
4.3.6 清空資料表58
4.4 資料分區的基本操作58
4.4.1 查詢分區資訊58
4.4.2 刪除指定分區58
4.4.3 複製分區資料59
4.4.4 重置分區數據60
4.4.5 卸載與裝載分區60
4.4.6 備份與還原分區61
4.5 分散式DDL執行61
4.6 資料的寫入61
4.7 資料的刪除與修改63
4.8 本章小結64
第5章 資料字典65
5.1 內置字典65
5.1.1 內置字典配置說明65
5.1.2 使用內置字典67
5.2 外部擴展字典67
5.2.1 準備字典資料67
5.2.2 擴展字典設定檔的元素組成68
5.2.3 擴展字典的資料結構69
5.2.4 擴展字典的類型71
5.2.5 擴展字典的資料來源79
5.2.6 擴展字典的資料更新策略84
5.2.7 擴展字典的基本操作85
5.3 本章小結87
第6章 MergeTree原理解析88
6.1 MergeTree的創建方式與存儲結構89
6.1.1 MergeTree的創建方式89
6.1.2 MergeTree的存儲結構91
6.2 數據分區93
6.2.1 資料的分區規則93
6.2.2 分區目錄的命名規則94
6.2.3 分區目錄的合併過程95
6.3 一級索引98
6.3.1 稀疏索引98
6.3.2 索引細微性99
6.3.3 索引資料的生成規則99
6.3.4 索引的查詢過程101
6.4 二級索引102
6.4.1 granularity與index_granularity的關係104
6.4.2 跳數索引的類型105
6.5 資料存儲106
6.5.1 各列獨立存儲106
6.5.2 壓縮資料塊106
6.6 資料標記109
6.6.1 資料標記的生成規則109
6.6.2 資料標記的工作方式110
6.7 對於分區、索引、標記和壓縮資料的協同總結113
6.7.1 寫入過程113
6.7.2 查詢過程114
6.7.3 資料標記與壓縮資料塊的對應關係114
6.8 本章小結116
第7章 MergeTree系清單引擎117
7.1 MergeTree117
7.1.1 數據TTL117
7.1.2 多路徑存儲策略121
7.2 ReplacingMergeTree128
7.3 SummingMergeTree130
7.4 AggregatingMergeTree134
7.5 CollapsingMergeTree137
7.6 VersionedCollapsingMergeTree140
7.7 各種MergeTree之間的關係總結141
7.7.1 繼承關係141
7.7.2 組合關係143
7.8 本章小結144
第8章 其他常見類型表引擎145
8.1 外部存儲類型145
8.1.1 HDFS145
8.1.2 MySQL149
8.1.3 JDBC150
8.1.4 Kafka152
8.1.5 File157
8.2 記憶體類型158
8.2.1 Memory159
8.2.2 Set159
8.2.3 Join160
8.2.4 Buffer162
8.3 日誌類型164
8.3.1 TinyLog164
8.3.2 StripeLog165
8.3.3 Log166
8.4 介面類別型167
8.4.1 Merge167
8.4.2 Dictionary168
8.4.3 Distributed169
8.5 其他類型170
8.5.1 Live View170
8.5.2 Null171
8.5.3 URL171
8.6 本章小結173
第9章 資料查詢174
9.1 WITH子句175
9.2 FROM子句177
9.3 SAMPLE子句178
9.4 ARRAY JOIN子句180
9.5 JOIN子句183
9.5.1 連接精度184
9.5.2 連接類型186
9.5.3 多表連接189
9.5.4 注意事項190
9.6 WHERE與PREWHERE子句190
9.7 GROUP BY子句193
9.7.1 WITH ROLLUP194
9.7.2 WITH CUBE194
9.7.3 WITH TOTALS195
9.8 HAVING子句195
9.9 ORDER BY子句197
9.10 LIMIT BY子句198
9.11 LIMIT子句199
9.12 SELECT子句200
9.13 DISTINCT子句200
9.14 UNION ALL子句202
9.15 查看SQL執行計畫203
9.16 本章小結207
第10章 副本與分片208
10.1 概述208
10.2 數據副本209
10.2.1 副本的特點212
10.2.2 ZooKeeper的配置方式212
10.2.3 副本的定義形式213
10.3 ReplicatedMergeTree原理解析214
10.3.1 資料結構215
10.3.2 副本協同的核心流程217
10.4 數據分片228
10.4.1 集群的配置方式228
10.4.2 基於集群實現分散式DDL232
10.5 Distributed原理解析236
10.5.1 定義形式236
10.5.2 查詢的分類237
10.5.3 分片規則238
10.5.4 分散式寫入的核心流程239
10.5.5 分散式查詢的核心流程245
10.6 本章小結251
第11章 管理與運維252
11.1 使用者配置252
11.1.1 用戶profile252
11.1.2 配置約束253
11.1.3 用戶定義254
11.2 許可權管理257
11.2.1 存取權限257
11.2.2 查詢許可權258
11.2.3 數據行級許可權259
11.3 熔斷機制261
11.4 資料備份263
11.4.1 匯出檔案備份263
11.4.2 通過快照表備份264
11.4.3 按分區備份264
11.5 服務監控265
11.5.1 系統表266
11.5.2 查詢日誌267
11.6 本章小結270
網路書店
類別
折扣
價格
-
新書83折$393