用过ClickHouse的朋友,估计不少人都踩过同一个坑,数据量小的时候,查询速度飞起,感觉这数据库简直无敌;可一旦数据量涨到TB级、甚至PB级,之前的流畅感瞬间消失,查询半天出不来结果,集群加了节点也没多大用,甚至还会出现数据卡死、节点崩溃的情况。其实这不是ClickHouse不行,而是你没做好“分片”。说白了,分片就是给ClickHouse的集群“分活干”,把海量数据拆成一小块一小块,分给不同的节点,让它们同时干活、并行计算,效率自然就上去了。但分片也不能瞎分,分不好反而会适得其反,下面就和大家一看看看ClickHouse分片的底层逻辑、实操步骤,还有那些必避的坑。一、先搞明白:分片到底是啥?不用懂复杂概念很多人一听到“分片”就头大,觉得是很高深的技术,其实特别好理解,举个生活化的例子就懂了。比如你有一堆1000份的文件,让一个人去整理,可能要花10个小时;但如果分给10个人,每个人整理100份,可能1个小时就搞定了。ClickHouse的分片,本质上就是这个道理——把一张大表的海量数据,按照一定规则拆成多份,每一份存到集群的不同节点上,查询的时候,所有节点一起并行处理,速度自然翻好几倍。这里要注意一个点,分片不是“可选操作”,而是当你数据量上来(比如超过1000万条)、单节点扛不住的时候,必须要做的事。而且分片是ClickHouse分布式集群的核心,只有做好分片,你加的节点才能真正发挥作用,不然再多节点也是闲置,纯属浪费资源。二、核心原则:跟着业务逻辑走,不要盲目分片很多人分片的误区,就是“凭感觉来”,比如觉得“分10片够多了”,或者随便找个字段当分片键,结果分完之后,数据全堆在某几个节点上(也就是数据倾斜),查询速度比不分片还慢,得不偿失。其实分片的核心原则就一个,跟着你的业务查询习惯来。简单说,你平时查询数据,最常用来过滤、分组的字段,就是最好的分片键;分片数量,也不是越多越好,要和你的集群节点数匹配。1. 分片键:选对了,分片就成功了一半分片键就是“拆分数据的依据”,选对分片键,能让查询只扫描必要的分片,不用做无用功,效率直接拉满。给大家举几个例子,供大家参考,比如: