clickhouse相关的引擎
文章目录
clickhouse相关的引擎
- tinylog
- mysql 引擎
- replaceingMerge Tree
- SummingMergeTree 引擎
- AggregatingMergeTree 引擎
- CK 引擎之CollapsingMergeTree 引擎
- CK 引擎之多版本折叠树引擎
«««< HEAD clickhouse 的引擎是这个数据库的一大特色
引擎决定了如何存储表的数据
- 数据存储在哪里,写到哪里
- 支持哪些查询以及如何支持
- 并发数据访问
- 索引的使用(如果存在)
- 是否可以执行多线程请求
- 数据复制参数
表引擎的使用方式是否必须显式在创建表时候定义表使用引擎,以及引擎相关使用参数
1.1 tinyLog
以列文件形式保存磁盘,不支持索引,没有并发控制,一般保存少量数据
这个log引擎会直接锁表
1.2 memory
内存引擎,数据以未压缩的原始形式保存在内存,服务器重启数据消失,读写操作不会相互阻塞,不支持索引。简单查询下有非常非常高的性能 (超过 10G/s)
一般用在测试,一般用不到它,除了测试,就是需要用在需要非常高的性能,同时数据量又不大的情况下(上限一亿行)的场景
1.3 mergeTree
最重要的是这个,一个系列,合并树家族
replaceingMerge Tree,SummingMergeTree 都是他的衍生引擎
|
|
数据Partitioning
ClickHouse支持PARTITION BY子句,在建表时可以指定按照任意合法表达式进行 数据分区 操作,比如通过toYYYYMM()将数据按月进行分区、toMonday()将数据按照周几进行分区、对Enum类型的列直接每种取值作为一个分区等。
数据Partition在ClickHouse中主要有两方面应用:
- 在 partition key 上进行分区裁剪,只查询必要的数据。灵活的partition expression设置,使得可以根据SQL Pattern进行分区设置,最大化的贴合业务特点。
- 对partition进行TTL管理,淘汰过期的 分区数据 。
partition原理 首先,partition并不是一个新鲜的概念,在很多数据库和分布式应用的设计中都会用到数据分区的思想。本质上partition就是对数据按照某种指定的规则进行切分,相同分区的数据在物理上往往会写入同一个文件或目录下,其目的是为了缩小查询范围,加快查询的速度。当然都叫partition,但是大家其实在实现的时候还是有一些差异的。
对某个字段做汇聚,如果按非partition的字段做范围查询,查询耗时1164秒,但如果按分区字段查询,查询时间则缩短到了4秒钟,简直天壤之别~~:
分区是表的分区,具体的DDL操作关键词是 PARTITION BY
,指的是一个表按照某一列数据(比如日期)进行分区,对应到最终的结果就是不同分区的数据会写入不同的文件中。
分片复用了数据库的分区,相当于在原有的分区下,作为第二层分区, 是在不同节点/机器上的体现。
数据分区-允许查询在指定了分区键的条件下,尽可能的少读取数据 数据分片-允许多台机器/节点同并行执行查询,实现了分布式并行计算
数据Partitioning
ClickHouse支持PARTITION BY子句,在建表时可以指定按照任意合法表达式进行数据分区操作,比如通过toYYYYMM()将数据按月进行分区、toMonday()将数据按照周几进行分区、对Enum类型的列直接每种取值作为一个分区等。
数据Partition在ClickHouse中主要有两方面应用:
在partition key上进行分区裁剪,只查询必要的数据。灵活的partition expression设置,使得可以根据SQL Pattern进行分区设置,最大化的贴合业务特点
对partition进行TTL管理,淘汰过期的分区数据。
作用
学过 hive的都知道,分区目的是降低扫描的范围,优化查询速度。
- 如果不填: 只会使用一个分区
- 分区目录: mergeTree 是以列文件+ 索引文件+表定义文件组成的,但是如果设定分区那么 这些问卷就会保存到不同的分区目录中。
其他特性
列 TTL
当列中的值过期时, ClickHouse会将它们替换成该列数据类型的默认值。如果数据片段中列的所有值均已过期,则ClickHouse 会从文件系统中的数据片段中删除此列。
TTL
子句不能被用于主键字段。
|
|
MergeTree合并树家族引擎
ReplacingMergeTree
该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。
在数据合并的时候会对主键进行去重,合并会在后台执行,执行时间未知,因此你无法预先做出计划
ReplacingMergeTree会根据ORDER BY所声明的表达式去重
创建表时没有设置ver参数,故保留分组内的最后一条数据(create_time字段)
AggregateMergeTree
该引擎改变了数据片段的合并逻辑,ClickHouse会将相同主键的所有行(在一个数据片段内)替换为单个存储一系列的聚合函数状态的行。可以使用该引擎来做增量数据统计聚合,包括物化视图的数据聚合。 AggregateMergeTree引擎的表不能直接使用insert来查询写入数据。一般用 insert select 来写入数据,常用于该引擎做增量数据统计聚合,包括物化视图的数据聚合。
|
|
创建物化视图
|
|
CollapsingMergeTree
CollapsingMergeTree会异步的删除特定列Sign有1和-1的值以外,其余所有字段的值都相等的成对的行。没有成对的行会被保留。该引擎可以降低存储量提高select查询效率。CollapsingMergeTree引擎有个状态列sign,这个值为1是”状态“行,-1为”取消“行。 对于数据而言只关心状态列为状态的数据,不关心状态列为取消的数据。
其他笔记
[[post/02.数据库/01.MySQL/3.索引 | mysql索引]] [[post/11.个人总结/mysql/mysql 索引 | 索引总结]]
文章作者 LYR
上次更新 2021-08-14