ClickHouse引擎介绍

一、基本介绍

  ClickHouse像MySQL一样提供了丰富的引擎;不同的引擎代表不同的类型,比如拥有何种特性、数据以何种形式被存储以及如何被加载。

二、数据库引擎

2.1 Ordinary

  默认引擎,此数据库可以使用任意表引擎。

2.2 Dictionary

  字典引擎,此数据库会为所有数据字典创建数据表。

2.3 Memory

  内存引擎,此数据库中的表只存放在内存中,重启丢失。

2.4 Lazy

  日志引擎,此数据库只能使用Log系列的表引擎。

2.5 MySQL

  MySQL引擎,此数据库可以自动拉取远端MySQL数据(类似于Oracle的dblink,可以对远程表进行读写

三、数据表引擎

3.1 MergreTree系列

  该引擎是官方主推的存储引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功能,ReplacingMergeTree有了去重功能,SummingMergeTree有了汇总求和功能,AggregatingMergeTree有聚合功能,CollapsingMergeTree有折叠删除功能,VersionedCollapsingMergeTree有版本折叠功能,GraphiteMergeTree有压缩汇总功能。在这些的基础上还可以叠加Replicated和Distributed。

3.1.1 ReplacingMergeTree

1、使用order by排序键作为判断重复数据的唯一键;
2、只有在合并分区的时候才会触发删除重复数据的逻辑;
3、以数据分区为单位删除数据。当分区合并时,同一分区内的重复数据会被删除,不同分区之间的重复数据不会被删除;
4、在进行数据去重时,因为分区内的数据已经基于 order by进行了排序,所以能够找到那些相邻的重复数据。
数据去重策略有两种:

  • 如果没有设置版本号,则保留同一组重复数据中的最后一行。
  • 如果设置了版本号,则保留同一组重复数据中ver字段取值最大的那一行

3.1.2 SummingMergeTree

1、用order by排序键作为聚合数据的条件key
2、只有在合并分区的时候才会触发聚合计算的逻辑
3、以数据分区为单位来聚合数据。当分区合并时,同一数据分区内聚合key相同的数据会被合并汇总,而不同分区之间的数据则不会被汇总。
4、如果在定义引擎时指定了columns汇总列(非主键的数值类型字段),则sum汇总这些列字段,如果未指定,则聚合所有非主键数值字段。
5、在进行数据汇总时,因为分区内的数据已经基于order by排序,所以能够找到相邻且拥有相同聚合key的数据。
6、在汇总数据时,同一分区内相同聚合key的多行数据会合并成一行。其中汇总字段会进行sum计算;对于那些非汇总字段,则会使用第一行数据的取值。
7、支持嵌套结构,但字段名称必须以map后缀结尾。嵌套类型中,默认以第一个字段为聚合key。除第一个字段意外,任何名称以key,id或type为后缀结尾的字段,都将和第一个字段组合成复合key。

3.1.3 AggregatingMergeTree

1、用order by排序键作为聚合数据的条件key
2、使用AggregateFunction字段类型定义聚合函数的类型以及聚合字段。
3、只有在合并分区的时候才会触发聚合计算的逻辑
4、以数据分区为单位来聚合数据,当分区合并时,同一分区内聚合key相同的数据会被合并计算,而不同分区之间的数据则不会被计算。
5、在进行数据计算时,因为分区内的数据已经基于order by排序,所以能够找到相邻且拥有相同聚合key的数据。
6、在聚合数据时,同一分区内相同聚合key的多行数据会合并成一行。对于非主键、非AggregateFunction字段,则会使用第一行数据的取值
7、AggregateFunction字段使用二进制存储,写入数据时,需要调用State函数;而在查询数据时,则需要调用相应的Merge函数。其中,*表示定义时使用的聚合函数
8、AggregateMergeTree通常作为物化视图的表引擎,与普通MergeTree搭配使用。

3.1.4 CollapsingMergeTree(VersionedCollapsingMergeTree)

  CollapsingMergeTree(VersionedCollapsingMergeTree) 会异步的删除(折叠)这些除了特定列 Sign 有 1 和 -1 的值以外,其余所有字段的值都相等的成对的行。没有成对的行会被保留。该引擎可以显著的降低存储量并提高 SELECT 查询效率。

3.1.5 GraphiteMergeTree

  该引擎用来对 Graphite数据进行瘦身及汇总。

3.2 Log系列

1、数据被顺序append写到磁盘上
2、不支持delete、update
3、不支持索引
4、不支持原子写
5、插入阻塞查询

3.2.1 TinyLog

  不支持并发读取,性能差,格式简单,适用存储中间数据

3.2.2 Log

  支持并发读取,每个列存储在单独文件中,性能较好

3.2.3 StripeLog

  支持并发读取,所有列存放在一个文件中,性能较好

3.3 Integration系列

  该系列用于集成外部的数据源 。

3.3.1 HDFS

3.3.2 MySQL

3.3.3 Kafka

3.3.4 RabbitMQ

3.3.5 JDBC

3.3.6 ODBC

3.4 Special系列

  

3.4.1 Memory

  数据存储在内存,重启数据丢失,读写不阻塞,不支持索引。

3.4.2 Merge

  在同一个server上把多张相同结构的物理表合并为一张逻辑表。

3.4.3 Distrbuted

  在不同的server上把多张相同结构的物理表合并为一张逻辑表。

3.4.4 Dictionary、File、Null、Set、Join、URL、View、MaterializedView、Buffer、External Data、GenerateRando

猜你喜欢

转载自blog.csdn.net/qq_42979842/article/details/108939841