ClickHouse表引擎简单介绍

ClickHouse的表引擎跟我们耳熟能详的Mysql表引擎差别很大,它功能更加强大

作用:
(1)数据存储位置(内存或者磁盘)
(2)操作方式和操作限制
(3)并发和多线程限制
(4)是否可以使用索引
(5)数据备份,分片等等限制
(6)指定数据源读取

有以下几种:

ClickHouse表引擎简单介绍_第1张图片

Log:日志表引擎

不支持索引,采用类似稀疏索引的方式存储数据,标志位和偏移量来指定多线程并行读取数据,指定开始读取的位置和指定跳跃行数。写操作会阻塞读操作,读操作也会阻塞写操作,如果写入数据表失败,就会导致数据损坏,读取报错。适合存储临时的,不重要的,增删改写操作不频繁的数据。

TinyLog;(小)日志表引擎

数据存在磁盘中,不支持索引,没有并发控制,但是支持并发,并行写入数据会有线程不安全问题造成数据损坏和脏数据
每个字段列都以压缩文件形式保存,占用空间较小,写入新数据时候会将新数据追加到文件末尾,增删改等写操作较少的数据,就可以存在该引擎的表
建表的时候指定ENGINE=TinyLog即可

上诉两款引擎真的非常适合用来存日志信息。可能跟他命名也有一定联系吧。使用上面两款表引擎,最重要的一点是写入数据前要进行数据备份,方便丢失数据和做数据恢复。
Memory;内存表引擎

完全基于内存的存储,速度极快(每秒查询10G),上限一亿条,但是断电或者重启服务会丢失数据。不支持索引,数据不压缩,所以会占用极大的内存空间,但是省去了解压缩的时间,提高了查询速度。适用于小数据量的快速读取场景。

Merge;合并表引擎

该引擎表不存储数据,但是可以从其他表读取数据自动合并。Merge引擎的表不允许insert数据。因为它自身根本不存储。
在这里插入图片描述
意思是创建一个以Merge引擎的表t ,这个表t会获取当前数据库currentDatabase的所有数据表做一个概念上的大框表,后面^t意思是筛选条件,当前数据库内所有以t开头的表

Merge Tree;分区合并

把相同特征的枝节数据合并。高效批量写入数据片段。合并减少存储文件,增加每个文件下的数据量
1:数据根据主键排序,支持自定义排序规则
2:可使用分区(只能按照日期分区,所以该引擎要求表中必须有个date类型数据)
3:支持数据副本
4:支持数据抽样,使用抽样表达式
该引擎会在未知时间自动在后台进行数据自动合并,合并规则一般按照日期,适用于超大宽表,并且持续添加数据的场景

ReplacingMergeTree:

在MergeTree基础上增加了“替换/删除重复数据”的功能,它会自动删除具有相同主键的重复项,但是由于替换的时候可能还会有数据未被处理,所以该引擎不保证一定不存在重复数据,它是在不定时自动merge的过程中逐步帮我们replace掉重复数据。

SummingMergeTree:

指定列数据加总后,两列相加,保留一列,删除一列,减少存储空间,对于不相加的数据列,只保留最先出现的
例如:
jojo , 3 , test
jojo , 6 , test2
合并之后就是: jojo , 9 , test (test先出现,所以只保留它 )

Distributed:

分布式引擎,本身不存储数据,可以在多服务器上进行分布式查询和插入数据,读取数据是自动并行操作。插入数据的时候,数据会随机插入到某个分片中。通过哈希的计算可得到对应的随机分区下标号,然后插入,跟nginx搞负载均衡反向代理转发请求的时候的感觉很像,可以通过这种方式把数据存到不同的集群机器中。
创建的时候指定:
ENGINE = Distributed(perftest_3shards_1replicas (集群名称) , default(数据库名称,这里是默认数据库) , table(你另外分布式表的表名) , id(分片规则的列字段,这里意思是按照ID进行分片) )
通过distributed引擎表读取的时候可以读取到所有的数据,插入的时候会随机插入到一个分片(或者是你指定的分片规则的对应的片区)的表里面
在这里插入图片描述

外部集成的表引擎:

ODBC:通过指定odbc连接读取数据源
JDBC:通过指定jdbc连接读取数据源;
MySQL:将MySQL作为数据存储,直接查询其数据;只要接入了Mysql数据源,创建一张ENGINE = MySQL(‘host:port’, ‘database’, ‘table’, ‘user’, ‘password’[, replace_query, 'on_duplicate_clause’]);的表。即可实现对mysql的数据进行读取,但是不支持update 和delete

ClickHouse表引擎简单介绍_第2张图片

HDFS:直接读取HDFS上的特定格式的数据文件;
Kafka:将Kafka数据导入ClickHouse

ClickHouse表引擎简单介绍_第3张图片
ClickHouse表引擎简单介绍_第4张图片

RabbitMQ:与Kafka类似

可以用于将外部数据导入到ClickHouse中,或者在ClickHouse中直接操作外部数据源。

查看自己的表引擎

show create table user_info_wen
更多详情查看大佬博客:篇二|什么是ClickHouse的表引擎?

你可能感兴趣的:(ClickHouse,数据库)