官术网_书友最值得收藏!

前言 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的朋友們!

主站蜘蛛池模板: 江源县| 上饶县| 廊坊市| 阆中市| 邢台市| 佳木斯市| 崇信县| 宜黄县| 彩票| 汉中市| 庐江县| 丰台区| 桂阳县| 凌海市| 内丘县| 长海县| 陈巴尔虎旗| 西乌珠穆沁旗| 宾川县| 竹山县| 甘孜县| 本溪| 洛浦县| 武义县| 泾阳县| 嘉峪关市| 大悟县| 溆浦县| 汾阳市| 金川县| 三河市| 凯里市| 富宁县| 广宁县| 衡阳县| 石河子市| 灌云县| 滦南县| 阳曲县| 津南区| 阳曲县|