- ClickHouse性能之巔:從架構設計解讀性能之謎
- 陳峰
- 2235字
- 2023-02-23 16:29:15
前言 Preface
為什么要寫這本書
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的朋友們!
- Node.js Design Patterns
- SQL學習指南(第3版)
- ASP.NET Core 5.0開發入門與實戰
- 看透JavaScript:原理、方法與實踐
- 高級C/C++編譯技術(典藏版)
- Oracle BAM 11gR1 Handbook
- 劍指Java:核心原理與應用實踐
- Salesforce Reporting and Dashboards
- jQuery Mobile移動應用開發實戰(第3版)
- Nginx Lua開發實戰
- Visual Studio Code 權威指南
- 3ds Max印象 電視欄目包裝動畫與特效制作
- Unity Android Game Development by Example Beginner's Guide
- Visual C++ 開發從入門到精通
- Learning Azure DocumentDB