Clickhouse 日志表引擎家族

若使用的数据量小于100万,面对的数据查询场景也比较简单,并且往往是一次写入多次查询,则日志家族系列的表引擎将会是一种不错的选择。

日志家族系列也拥有一些共性特征:

1.不支持分区 索引等高级特性

2.不支持并发读写,即当针对一张日志表写入数据的时候,针对这张表的查询会被阻塞,直到写入操作结束

3.有物理存储,写入的数据会被保存到磁盘上

4.数据写入只会追加到最后

5.不支持数据的mutations操作(不支持update和delete操作)

6.不支持数据的原子写入

7.性能由低到高:TinyLog-- >StripeLog --> Log

概述:

  • TinyLog:不支持并发读取数据文件,查询性能较差;格式简单,适合用来暂存中间数据。
  • StripLog:支持并发读取数据文件,查询性能比TinyLog好;将所有列存储在同一个大文件中,减少了文件个数。
  • Log:支持并发读取数据文件,查询性能比TinyLog好;每个列会单独存储在一个独立文件中。

TinyLog:

TinyLog是日志家族系列中性能最低的表引擎,存储结构由数据文件和元数据两部分组成。其中数据文件按照列独立存储,即每个列字段都拥有一个与之对应的bin文件。TinyLog不支持分区,没有mrk文件,不支持bin文件的并行读取操作,只适合在非常简单的场景下使用。

Clickhouse> create table default.t_tinylog(id bigint,code bigint)engine=TinyLog();
Clickhouse> insert into table default.t_tinylog select number,number+1 from numbers(100);

查看表结构:
# ls -l /var/lib/clickhouse/data/default/t_tinylog/
total 12
-rw-r-----. 1 clickhouse clickhouse 432 Jul 31 00:34 code.bin
-rw-r-----. 1 clickhouse clickhouse 430 Jul 31 00:34 id.bin
-rw-r-----. 1 clickhouse clickhouse  66 Jul 31 00:34 sizes.json

# cat /var/lib/clickhouse/data/default/t_tinylog/sizes.json 
{"yandex":{"code%2Ebin":{"size":"432"},"id%2Ebin":{"size":"430"}}}

StripeLog:

StripLog表引擎存储结构由三个文件组成:
data.bin 数据文件,所有的列字段使用一个文件保存,他们的数据都会被写入data.bin.
index.mrk:数据标记文件,保存了数据在data.bin文件中的位置信息。利用数据标记能使用多线程,以并行的方式读取data.bin内的压缩数据块,从而提升数据查询的性能。
size.json:元数据文件,记录data.bin和index.mrk 大小的信息。

StripLog拥有了更高的查询性能,支持查询并行查询,同时使用了更少的文件描述符号。

Clickhouse>  create table default.t_stripelog(id bigint,code bigint)engine=StripeLog();

Clickhouse> insert into table default.t_stripelog select number,number+100 from numbers(1000);


# ls -l /var/lib/clickhouse/data/default/t_stripelog/
total 16
-rw-r-----. 1 clickhouse clickhouse 8108 Jul 31 00:47 data.bin
-rw-r-----. 1 clickhouse clickhouse   61 Jul 31 00:47 index.mrk
-rw-r-----. 1 clickhouse clickhouse   69 Jul 31 00:47 sizes.json

# cat /var/lib/clickhouse/data/default/t_stripelog/sizes.json 
{"yandex":{"data%2Ebin":{"size":"8108"},"index%2Emrk":{"size":"61"}}}

Log:

Log表引擎是日志家族系列中性能最高的表引擎。Log表引擎的存储结构由三部分组成:

[Column].bin数据文件,数据文件按照列独立存储,每个列字段都拥有一个与之对应的bin文件。

_marks.mrk :数据标记文件,统一保存了数据在各个[column].bin文件中的位置信息,利用数据标记能使用多个线程,以并行的方式读取bin文件内的压缩数据块,从而提高数据查询的性能。

size.json:元数据文件,记录了[column].bin和_marks.mrk大小的信息。

Log拥有了数据标记和各个列数据独立存储的功能,则可以支持并行查询和按照列读取数据,但是也需要更多的文件描述符,相对于StripeLog.

 

Clickhouse> create table default.t_log(id bigint,code bigint,createtime datetime not null)engine=Log();

Clickhouse> insert into default.t_log select number,number+10,now() from numbers(500);


[root@hadoop ~]# ls -l /var/lib/clickhouse/data/default/t_log/
total 20
-rw-r-----. 1 clickhouse clickhouse 2033 Jul 31 01:00 code.bin
-rw-r-----. 1 clickhouse clickhouse   46 Jul 31 01:00 createtime.bin
-rw-r-----. 1 clickhouse clickhouse 2029 Jul 31 01:00 id.bin
-rw-r-----. 1 clickhouse clickhouse   48 Jul 31 01:00 __marks.mrk
-rw-r-----. 1 clickhouse clickhouse  131 Jul 31 01:00 sizes.json
[root@hadoop ~]# cat /var/lib/clickhouse/data/default/t_log/sizes.json 
{"yandex":{"__marks%2Emrk":{"size":"48"},"code%2Ebin":{"size":"2033"},"createtime%2Ebin":{"size":"46"},"id%2Ebin":{"size":"2029"}}}

 

参考:

https://clickhouse.tech/docs/en/engines/table-engines/log-family/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值