ClickHouse性能之巔:從架構設計解讀性能之謎
定 價:¥89
中 教 價:¥52.51 (5.90折)促銷
庫 存 數: 2
叢 書 名:數據庫技術叢書
這是一本通過分析ClickHouse底層引擎架構來解讀ClickHouse極致性能的底層邏輯的著作,同時還總結了ClickHouse在各種適用場景中的使用技巧和性能調優方法,讓讀者知其然,也能知其所以然。
全書一共12章,分為兩個部分:
第1部分 架構篇(第1-7章)簡要地介紹了數據倉庫的核心技術和思路,系統講解了ClickHouse的查詢性能優勢、適用場景、架構設計和運作過程,深入地剖析了ClickHouse的存儲引擎架構、計算引擎架構以及決定ClickHouse性能的關鍵因素,還將ClickHouse與其他數倉架構進行了深度對比,不僅闡明了ClickHouse查詢速度快的底層邏輯,也推導出了ClickHouse的適用場景。
第2部分 實戰篇(第8-12章)針對ClickHouse的適用場景,講解了它的各種使用技巧以及存算分離架構、分布式架構等云計算時代的全新架構,更重要的是,從數據結構、內存、磁盤、網絡、CPU、查詢等方面全面總結了ClickHouse的性能優化方法和原則。
(1)作者經驗豐富:作者是滴普科技合伙人兼首席架構師,在ClickHouse方面積累了大量的實戰經驗。
(2)重在授人以漁:通過剖析ClickHouse底層引擎的架構設計來解密ClickHouse高性能背后的底層邏輯。
(3)同時授人以漁:結合ClickHouse的應用場景,總結了大量的使用技巧和性能優化方法。
(4)近10位專家聯袂推薦:滴普科技聯合創始人楊磊、京東云數據庫研發負責人高新剛、ClickHouse 中國社區創始人郭煒等近10位專家強烈推薦。
為什么要寫這本書2021年,一次從深圳到上海的航班上,我和同事討論到了客戶的需求。同事反饋:客戶抱怨現有的Hive數據倉庫開發一個指標的周期太長,客戶提出一個想法后,需要很久才能得到數據,嚴重降低了客戶的決策效率。我自信地向同事推薦了ClickHouseClickHouse正好可以用來應對這類數據探索的場景。我滿心歡喜地認為這個客戶的需求得到了圓滿的解決,然而墨菲定律再一次發揮了它強大的威力。幾周后,這位同事急吼吼地找到了我:峰少,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的朋友們!
陳峰
資深大數據專家和架構師,ClickHouse技術專家,滴普科技(2B領域獨角獸)合伙人兼首席架構師,從0到1地建設了首支滴普科技的數據中臺技術團隊,構建了滴普科技的數據技術體系。
有多年的大數據架構經驗,作者曾擔任百麗數據中臺麗影洞察項目的大數據架構師,將ClickHouse成功引入百麗。
曾在中國數據庫技術大會(Database Technology Conference China,DTCC)等多個會議上發表ClickHouse主題演講,對ClickHouse有非常深入的研究,實踐經驗豐富。
積極參與ClickHouse社區活動,積極推廣ClickHouse。在多個項目中應用ClickHouse技術,將ClickHouse的強大能力推廣到企業中,同時積極地向ClickHouse社區貢獻代碼和開源工具。
贊譽序1序2自序前言第一部分 架構篇第1章 數據倉庫的核心技術 31.1 OLAP和OLTP的本質區別 41.1.1 數據三范式 41.1.2 規范化的意義 61.1.3 規范化的局限 71.1.4 數倉建模的本質 71.1.5 OLAP和OLTP的底層數據模型 81.1.6 維度建模 81.2 典型大數據數倉技術及其核心思路 101.2.1 Hive 101.2.2 HBase 111.2.3 Kylin 121.2.4 其他數倉 131.3 傳統數倉的缺陷 131.3.1 效率低 131.3.2 延遲高 141.3.3 成本高 141.4 ClickHouse查詢性能的優勢 151.4.1 向量化引擎 151.4.2 高效的數據壓縮 161.4.3 高效的I/O優化 171.5 本章小結 18第2章 ClickHouse簡介 192.1 ClickHouse的4個標簽 192.1.1 性能強大 192.1.2 單機處理能力強 202.1.3 成本低 212.1.4 不支持事務 212.2 ClickHouse的3個適用場景 222.2.1 BI報表的交互式分析 222.2.2 互聯網日志分析 222.2.3 廣告營銷 232.3 本章小結 24第3章 ClickHouse架構概覽 253.1 ClickHouse架構簡介 263.2 ClickHouse的核心抽象 273.2.1 列和字段 273.2.2 數據類型 283.2.3 塊 323.2.4 表 333.3 ClickHouse的運作過程 353.3.1 數據插入過程 353.3.2 數據查詢過程 353.3.3 數據更新和數據刪除過程 363.4 本章小結 37第4章 MergeTree存儲引擎架構 394.1 MergeTree存儲引擎的三大特點 404.2 MergeTree的數據組織 414.2.1 塊 414.2.2 數據堆放方式 414.3 MergeTree的文件組織 434.3.1 數據文件、元數據文件、索引文件和其他文件 454.3.2 分區 474.3.3 數據庫和表 484.4 索引 494.4.1 主鍵索引 494.4.2 標記 494.5 與事務數據庫存儲引擎的對比 504.6 存儲引擎如何影響查詢速度 524.6.1 預排序 524.6.2 列存 524.6.3 壓縮 534.7 MergeTree存儲引擎的工作過程 534.7.1 數據庫、數據表的創建過程 544.7.2 數據插入過程 544.7.3 分區合并和刪除過程 544.7.4 數據讀取過程 564.8 本章小結 59第5章 ClickHouse計算引擎架構 615.1 ClickHouse計算引擎的架構簡介與設計思想 615.1.1 整體架構 625.1.2 SQL解析器 625.1.3 解釋器 635.1.4 執行器 635.1.5 設計思想 645.2 火山模型 655.2.1 火山模型概述 655.2.2 火山模型的原理 665.2.3 火山模型的優點與缺點 675.3 向量化引擎 675.3.1 向量化引擎的實現方式 685.3.2 ClickHouse中的向量化算子 695.3.3 向量化引擎的前提 705.4 計算引擎如何影響查詢速度 725.4.1 ClickHouse查詢速度快的前提 725.4.2 ClickHouse查詢速度快的本質 745.5 本章小結 74第6章 ClickHouse與其他數倉架構的對比 756.1 ClickHouse與Hive的對比 756.1.1 Hive的數據文件 766.1.2 Hive的存儲系統 826.1.3 Hive計算引擎與ClickHouse計算引擎的差異 846.1.4 ClickHouse比Hive查詢速度快的原因 856.2 ClickHouse與HBase的對比 866.2.1 HBase的數據模型 866.2.2 HBase的存儲系統與ClickHouse的異同 876.2.3 HBase的適用場景及ClickHouse不適合的原因 876.3 ClickHouse與Kylin的對比 886.3.1 Kylin的架構 886.3.2 Kylin解決性能問題的思路 886.3.3 Kylin方案的缺陷 896.3.4 ClickHouse的方案 896.4 本章小結 91第7章 深度思考:決定外在能力的因素 937.1 從架構層面分析ClickHouse 937.1.1 ClickHouse速度快的前提 937.1.2 對ClickHouse的一些誤解 947.2 結構決定功能 957.2.1 方法論 967.2.2 意義 977.2.3 不要過度設計 987.3 從ClickHouse的設計來理解 997.3.1 結構決定能力的上限 997.3.2 結構決定應用層算法 997.4 本章小結 100第二部分 實戰篇第8章 ClickHouse使用技巧 1058.1 數據導入、導出技巧 1058.1.1 外部文件導入、導出技巧 1058.1.2 靈活使用集成表引擎導入、導出數據 1098.2 建表技巧 1178.2.1 表引擎選擇技巧 1188.2.2 分區鍵選擇技巧 1208.2.3 數據結構選擇技巧 1208.2.4 分區技巧 1218.3 高級技巧 1218.3.1 物化視圖 1218.3.2 投影 1228.3.3 位圖 1228.3.4 變更數據捕獲 1238.4 常見報錯及處理方法 1238.5 本章小結 124第9章 ClickHouse實現用戶畫像系統 1259.1 用戶畫像概述 1259.1.1 用戶畫像系統介紹 1259.1.2 用戶畫像系統的需求描述 1279.1.3 用戶畫像系統的需求分析 1279.1.4 用戶畫像系統的架構 1289.2 用戶畫像系統的關鍵技術實現 1299.2.1 技術選型 1299.2.2 分析階段 1309.2.3 運營階段 1369.3 基于ClickHouse的用戶畫像系統的優點 1379.4 本章小結 139第10章 ClickHouse的存算分離架構 14110.1 存算分離架構背景 14110.1.1 相關概述 14110.1.2 存算分離的典型架構 14210.1.3 存算分離的意義 14310.1.4 存算分離的局限 14510.2 ClickHouse中的存算分離 14710.2.1 實現方式 14710.2.2 注意事項 15010.3 存算分離架構給ClickHouse帶來的優勢 15110.4 本章小結 152第11章 ClickHouse的分布式架構 15311.1 架構特點及對比 15311.1.1 ClickHouse分布式架構的優點 15411.1.2 ClickHouse分布式架構的缺點 15511.1.3 ClickHouse與Hadoop的分布式架構對比 15611.2 基本概念 15611.2.1 集群 15711.2.2 副本 15811.2.3 分片 15911.3 ClickHouse的復制表引擎 16011.3.1 創建復制表 16011.3.2 復制表復制 16111.3.3 復制表查詢 16111.4 ClickHouse分布式表引擎 16211.4.1 創建分布式表 16211.4.2 分布式表查詢原理 16311.4.3 分布式表的數據寫入方案 16511.4.4 分布式表中副本的處理方式 16511.5 本章小結 166第12章 ClickHouse性能優化 16712.1 性能優化的原則 16712.2 數據結構優化 16812.3 內存優化 17112.4 磁盤優化 17112.5 網絡優化 17312.6 CPU優化 17312.7 查詢優化 17412.8 數據遷移優化 17612.9 本章小結 177