为什么要写这本书
生生不息,“折腾”不止。为什么新的技术层出不穷,一直会更替变换?因为人们总是乐于追求更加美好的事物,因此业务总会产生新的诉求。
在软件领域,技术与业务犹如一对不可拆分的双轨车道,承载着产品这辆火车稳步向前。一方面,业务的诉求必须得到满足,所以它倒逼技术提升;另一方面,技术的提升又为业务模式带来了新的可能。
在我所处的BI分析领域,分析软件的产品形态和底层技术就历经了几番更替。特别是在近些年,随着数字化转型浪潮的持续加温,以及“自服务”“人人都是分析师”等理念的进一步推广,分析型软件对底层OLAP技术的实时性提出了越来越苛刻的要求。传统数据库技术早已不堪重负,以Hadoop生态为代表的大数据技术也遇到了各种各样的难题。
在一次机缘巧合下我接触到了ClickHouse,我对它最初的印象极为深刻,ROLAP、在线实时查询、完整的DBMS、列式存储、不需要任何数据预处理、支持批量更新、具有非常完善的SQL支持和函数、支持高可用、不依赖Hadoop复杂生态、开箱即用……借助它仿佛就能解决所有的难题。在经过一番论证之后,我们用ClickHouse完全替换了公司现有产品的底层实现,使公司产品相关性能得到大幅提升。
ClickHouse就是这样一款拥有卓越性能的OLAP数据库,是目前业界公认的OLAP数据库黑马,有很大的发展潜力,并且已经在许多企业的内部得到应用。
然而在使用的过程中,我发现ClickHouse的学习资料匮乏,除了官方手册之外,基本没有其他成体系的资料。即便是官方手册,也缺乏一些原理性的解释。虽然它早在2016年就进行了开源,然而截至目前,市面上也没有一本相关的书籍。
作为一名ClickHouse的贡献者,我觉得有义务做些什么。所以我对自己在实践和学习ClickHouse的过程中得到的经验进行了梳理和总结,并编写成书,分享给各位读者。与此同时,也希望将这款优秀的开源软件介绍给更多的朋友。最后,希望本书能够在各位读者应用ClickHouse时提供一定的帮助。
读者对象
商业智能分析领域的工程师:作为一款性能卓越的OLAP数据库,ClickHouse非常适合用作分析软件的底层数据库。通过阅读本书,你将快速掌握ClickHouse的使用方法及其核心原理,这将有助于你顺利把ClickHouse运用在程序中,从而为程序带来数倍至数百倍的性能提升。
数据分析领域的工程师:作为分析领域的工程师,你可能会面对日志分析、用户行为分析、异常检测、流量分析等众多场景,ClickHouse可以支撑从数十行至数万亿行数据规模的一站式分析查询工作。通过阅读本书,你将快速掌握ClickHouse的使用方法,这将有助于你顺利把ClickHouse运用在分析场景中,从而带来工作效率的提升以及软硬件成本的降低。
软件架构师:作为一名软件架构师,需要持续保持敏锐的嗅觉以跟进业界的新动态。所以我向你隆重推荐ClickHouse,它是OLAP数据库领域的一项新兴技术,简单易用且拥有强大的性能。通过阅读本书,你将迅速了解ClickHouse的核心特点和能力边界。本书对ClickHouse核心原理部分的讲解将有助于你进行技术选型。如果你恰好在进行OLAP领域相关的架构设计,那么ClickHouse很可能就是你一直苦苦寻觅的那剂良方。
计算机专业的高校学生:大数据早已成为国家战略,现如今许多高校都开设了Hadoop相关的大数据课程。但Hadoop毕竟是十多年前的产物。在掌握Hadoop基础知识的同时,也应该了解业界正在运用的新兴技术。即便是没有选修大数据课程的学生,我也推荐阅读本书。因为目前在高校的教学体系中,数据库软件相关的课程大部分以介绍OLTP数据库为主(例如SQL Server),然而在实际工作中,还会用到一类专门用于分析的OLAP数据库,ClickHouse就是其中的佼佼者。本书深入浅出,体系化地介绍了ClickHouse的方方面面,非常适合作为延伸读物供相关专业的学生阅读。这将有助于大家紧跟技术潮流,提升就业竞争力。
本书特色及主要内容
这是一本全方位介绍ClickHouse的专业技术书,本书的问世不仅缓解了目前ClickHouse学习资料匮乏的局面,也纠正了网络上部分对ClickHouse的错误解读。
本书从时代背景、发展历程、核心概念、基础功能及核心原理等几个方面全面且深入地对ClickHouse进行解读。通过阅读本书,你不仅可以一站式完成对ClickHouse的学习,还能得到许多一手信息(例如ClickHouse名称的由来)。
在行文方面,本书尽可能使用浅显易懂的语言,并通过大量演示案例引导读者深入学习。在核心部分,本着一图胜千言的原则,本书配有大量的示意图例以帮助读者加深理解。
从逻辑上说,本书主体分为三大部分共11章,各章节之间以循序渐进原则来安排。
第一部分 背景篇(第1~2章),从宏观角度描述了ClickHouse出现的时代背景、发展历程以及核心特点。
第1章 阐述了ClickHouse诞生的缘由和发展历程。
第2章 快速浏览了ClickHouse的核心特性和逻辑架构,并进一步探讨了它的成功秘诀。
第二部分 基础篇(第3~5章),从使用角度介绍了ClickHouse的基础用法。
第3章 介绍了ClickHouse的安装过程,并讲解了基础封装接口和内置工具,为后续内容讲解提供演示环境。
第4章 介绍了ClickHouse的基础概念和基本操作方法,包括数据的类型、数据表的定义、数据表的基本操作(增、删、改、移等)、数据分区的基本操作(查询、删除、复制、重置、装/卸载等)。同时也介绍了DML查询的基本用法。
第5章 从内置字典和外部扩展字典两个方面对ClickHouse数据字典的工作原理和操作方法进行了介绍,尤其是ClickHouse在数据字典方面的特殊之处,本书进行了详细剖析。
第三部分 原理篇(第6~11章),从原理角度解析了ClickHouse核心功能的运行机理。
第6章 全方位深度解读了MergeTree表引擎的工作原理,包括MergeTree的基础属性和物理存储结构,以及数据分区、一级索引、二级索引、数据存储和数据标记等重要特性。
第7章 全方位深度解读了MergeTree表引擎系列中5种常用变种引擎的核心逻辑和使用方法。
第8章 介绍了除MergeTree系列之外的其余5大类共18种表引擎的核心逻辑和使用方法。
第9章 按照ClickHouse解析SQL的顺序依次介绍了WITH、FROM、SAMPLE等10余种查询子句的用法。
第10章 对副本、分片和集群的核心工作原理和使用方法进行介绍,这是实现容灾机制的必备知识。
第11章 对ClickHouse的权限管理、熔断机制、数据备份和运行监控进行剖析,以求进一步完善ClickHouse在实际工作中的安全性和健壮性。
如何阅读本书
本书会涉及分布式数据库领域的相关知识,故在阅读本书前读者应具备基础的分布式数据库的知识。另外本书假定读者对使用Java、SQL编程也有一定了解,且熟悉OLAP、分布式、多线程、集群、副本、分片等概念。
本书为照顾初学者,包含基础知识部分。如果你已经熟练掌握ClickHouse的基础知识,可以略过第3~5章的部分内容。否则,建议你顺序阅读全书。
不论是哪种类型的读者,都建议阅读第1章的内容,因为这部分不仅从时代背景的角度解读了ClickHouse的发展历程,还揭露了它的两个小秘密。通过对第1章的阅读,你会看到一个更加丰富立体的ClickHouse。
与此同时,也强烈建议所有读者阅读第6章和第10章,因为这两章阐释了ClickHouse最为核心的部分,即MergeTree的核心原理,以及副本与分片的核心原理。通过阅读这两章,你对ClickHouse运行机理的理解会更加深刻,这将有助于你把ClickHouse运用得更加炉火纯青。
由于篇幅所限,本书没有包含ClickHouse函数、配置参数的内容。我认为,要学习这部分内容,查阅官方手册是一种更为高效的方式。
本书内容基于ClickHouse 19.17.4.11版本编写,演示时所用操作系统为CentOS 7.7。书中涉及的所有演示案例,均经过实际版本验证通过。
另外,为了帮助读者更好地理解和应用书中的知识点,本书提供了专用的演示代码和部分样例数据,大家可以根据需要自行下载(https://github.com/nauu/clickhousebook)。
勘误和支持
由于水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,我特意创建了一个提供在线支持与应急方案的站点https://github.com/nauu/clickhousebook。你可以将书中的错误发布在Bug勘误表页面中,也可以将遇到的任何问题发布在Q&A页面,我将尽量在线上为你提供最满意的解答。
如果你有更多的宝贵意见,也欢迎发送邮件至出版社邮箱214399230@qq.com,期待能够得到你的真挚反馈。
同时,你也可以关注我的微信公众号chcave,我会在此定期分享ClickHouse的最新资讯、趣闻杂谈、使用经验等。
致谢
感谢我的家人。如果没有你们的悉心照顾和鼓励,我不可能完成本书。
感谢我的公司远光软件。远光软件为我提供了学习和成长的环境,书中的很多知识都来自我在远光软件的工作实践。
感谢我的挚友李根。谢谢你提出了许多宝贵的建议。
感谢我的同事兼伙伴—谢小明、彭一轩、殷雷、胡艺、陈雪莹、潘登、王涛、库生玉、李昂、何宇、张锐、陈泽华、李国威、杨柯、张琛、郑凤英、姜亚玮以及名单之外的更多朋友,感谢你们在工作中对我的照顾和支持,十分荣幸能够与你们同在一个富有激情与活力的团队。
感谢ClickHouse社区的伙伴—Ivan Blinkov、Alexey Milovidov、郭炜、郑天祺、张健、李本旺、高鹏、赵群、胡宸章、杨兆辉、丁晓坤、王金海以及名单之外的更多朋友,是你们的无私奉献促进了社区的发展,加速了ClickHouse的普及。
感谢华章鲜读的读者朋友(微信名称,排名不分先后)—濤、马尚、君Hou、renwei、Luyung、朱熊、Duke、lansane、Lithium、xchf、陈刚、路途、一念之间、辛、李海武以及名单之外的更多朋友,是你们提供的宝贵建议帮助我提升了书稿的质量。
感谢机械工业出版社华章公司的编辑杨福川老师、孙海亮老师、李艺老师,在这一年多的时间中始终支持我的写作,你们的鼓励和帮助引导我顺利完成全部书稿。