ClickHouse的复习
- ClickHouse的应用场景和优缺点
ClinkHouse 是一个联机分析型数据库
常用于数据以大批量进行插入的场景
而且在查询的时候最好只查询某几列,但是行数据很多的场景。
处理单个查询时需要高吞吐量
不需要事务,对于数据一致性要求不是特别高
那么其优点就是支持进行行存储,而且吞吐量巨大
写入大批量数据的时候非常快
其缺点则是不支持真正的删除和更新
对于join的支持并不好
而且由于采用了并行处理,即使是一个查询,也会先进行分配一半的CPU进行执行,所以在多个查询并发的时候可能由于cpu的分配不够,导致进行阻塞。
- ClinkHouse的核心特性
首先是列存储,支持从存储系统中只读取必要的列数据
其次是支持向量化执行,比起传统的逐行进行处理,性能消耗更低
对于文件存储,则是采用了编码压缩,每一列的数据在存储的时候都是经过排序的,整体的局部规律性很强。而且利用LZ4,Snappy等压缩算法进一步提高了压缩比。
最后是支持多索引,可以用于加快查询速度。
- 使用ClinkHouse的注意项
需要注意,如果需要分区键,那么在进行分区的时候,选择分区键的粒度很重要,如果时间的话,最好是按照天粒度
其次是指定索引列,clickhouse中的索引列就是排序列,通过order by指定,一般来说是频率越高,那么在order by中越靠前,但是需要注意primary key,即主键选择的时候比较反直觉。不能直接拿用户ID作为索引列,因为数据量太大了,而primary key 必须要包含在order by之中。所以用户ID并不适合做索引列。
还有就是在查询的时候需要一定要搭配limit使用,或者配合where,不然太浪费性能了。
多表join的时候需要满足小表在右边的原则,因为右表会加载到内存中和左表进行对比。
- ClickHouse的引擎有哪些?
一般来说有MergeTree系列引擎,Log系列的引擎,其他系统集成的引擎,特殊的引擎
我们说下MergeTree系列引擎,其中包含MergeTree,ReplacingMergeTree,SummingMergeTree,AggregatingMergeTree
MergeTree主要是支持所有ClickHouse的核心功能,支持主键排序,支持数据副本,支持数据采样
- 创建表时候的核心参数有
首先要指定ENGINE,明确是哪个引擎
ORDER BY,是Merge Tree中的必填项,主要是在不设置主键的时候,会按照order by的字段进行排序处理,而且主键也要是order by的前缀字段。
Order by 可以指代PRIMARY KEY,一般我们只声明ORDER BY即可
除此之外就是PARTITION BY,分区键
PRIMARY KEY,指定主键
TTL,设置数据的存活时间