代码编织梦想

在这里插入图片描述

1、ClickHouse 的逻辑数据模型?

从用户使用角度看,ClickHouse 的逻辑数据模型与关系型数据库有一定的相似:
一个集群包含多个数据库,一个数据库包含多张表,表用于实际存储数据。
在这里插入图片描述

2、ClickHouse 的核心特性?

l 列存储:列存储是指仅从存储系统中读取必要的列数据,无用列不读取,速
度非常快。ClickHouse 采用列存储,这对于分析型请求非常高效。一个典型
且真实的情况是,如果我们需要分析的数据有 50 列,而每次分析仅读取其
中的 5 列,那么通过列存储,我们仅需读取必要的列数据,相比于普通行
存,可减少 10 倍左右的读取、解压、处理等开销,对性能会有质的影响。
l 向量化执行:在支持列存的基础上,ClickHouse 实现了一套面向 向量化处
理 的计算引擎,大量的处理操作都是向量化执行的。相比于传统火山模型中
的逐行处理模式,向量化执行引擎采用批量处理模式,可以大幅减少函数调
用开销,降低指令、数据的 Cache Miss,提升 CPU 利用效率。并且
ClickHouse 可 利 用 SIMD 指令进一 步 加速执行效率。 这 部分是
ClickHouse 优于大量同类 OLAP 产品的重要因素。
l 编码压缩:由于 ClickHouse 采用列存储,相同列的数据连续存储,且底层
数据在存储时是经过排序的,这样数据的局部规律性非常强,有利于获得更
高的数据压缩比。此外,ClickHouse 除了支持 LZ4、ZSTD 等通用压缩算
法外,还支持 Delta、DoubleDelta、Gorilla 等专用编码算法,用于进一步
提高数据压缩比。
l 多索引:列存用于裁剪不必要的字段读取,而索引则用于裁剪不必要的记录
读取。ClickHouse 支持丰富的索引,从而在查询时尽可能的裁剪不必要的
记录读取,提高查询性能。

3、使用 ClickHouse 时有哪些注意点?

分区和索引
分区粒度根据业务特点决定,不宜过粗或过细。一般选择按天分区,也可指定为tuple();以单表 1 亿数据为例,分区大小控制在 10-30 个为最佳。
必须指定索引列,clickhouse 中的索引列即排序列,通过 order by 指定,一般
在查询条件中经常被用来充当筛选条件的属性被纳入进来;可以是单一维度,也可以是组合维度的索引;通常需要满足高级列在前、查询频率大的在前原则;还有基数特别大的不适合做索引列,如用户表的 userid 字段;通常筛选后的数据满足在百万以内为最佳。
数据采样策略通过采用运算可极大提升数据分析的性能。
数据量太大时应避免使用 select * 操作,查询的性能会与查询的字段大小和数
量成线性变换;字段越少,消耗的 IO 资源就越少,性能就会越高。
千万以上数据集用 order by 查询时需要搭配 where 条件和 limit 语句一起使用。
如非必须不要在结果集上构建虚拟列,虚拟列非常消耗资源浪费性能,可以考虑在前端进行处理,或者在表中构造实际字段进行额外存储。
不建议在高基列上执行 distinct 去重查询,改为近似去重 uniqCombined。
多表 Join 时要满足小表在右的原则,右表关联时被加载到内存中与左表进行比较。
存储ClickHouse不支持设置多数据目录,为了提升数据io性能,可以挂载虚拟券组,一个券组绑定多块物理磁盘提升读写性能;多数查询场景 SSD 盘会比普通机械硬盘快 2-3 倍。

4、 ClickHouse 的引擎有哪些?

在这里插入图片描述

ClickHouse 提供了大量的数据引擎,分为数据库引擎、表引擎,根据数据特点及使用场景选择合适的引擎至关重要。
ClickHouse 引擎分类
在以下几种情况下,ClickHouse 使用自己的数据库引擎:
l 决定表存储在哪里以及以何种方式存储;
l 支持哪些查询以及如何支持;
l 并发数据访问;
l 索引的使用;
l 是否可以执行多线程请求;
l 数据复制参数。
在所有的表引擎中,最为核心的当属 MergeTree 系列表引擎,这些表引擎拥有最为强大的性能和最广泛的使用场合。对于非 MergeTree 系列的其他引擎而言,主要用于特殊用途,场景相对有限。而 MergeTree 系列表引擎是官方主推的存储引擎,支持几乎所有 ClickHouse 核心功能。
MergeTree 作为家族系列最基础的表引擎,主要有以下特点:
l 存储的数据按照主键排序:允许创建稀疏索引,从而加快数据查询速度;
l 支持分区,可以通过 PRIMARY KEY 语句指定分区字段;
l 支持数据副本;
l 支持数据采样。

5、建表引擎参数有哪些?

ENGINE:ENGINE = MergeTree(),MergeTree 引擎没有参数。
ORDER BY:order by 设定了分区内的数据按照哪些字段顺序进行有序保
存。
order by 是 MergeTree 中唯一一个必填项,甚至比 primary key 还重要,因
为当用户不设置主键的情况,很多处理会依照 order by 的字段进行处理。
要求:主键必须是 order by 字段的前缀字段。
如果 ORDER BY 与 PRIMARY KEY 不同,PRIMARY KEY 必须是 ORDER BY 的前缀(为了保证分区内数据和主键的有序性)。
ORDER BY 决定了每个分区中数据的排序规则;
PRIMARY KEY 决定了一级索引(primary.idx);
ORDER BY 可以指代 PRIMARY KEY, 通常只用声明 ORDER BY 即可。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_50843918/article/details/130774920