clickhouse引擎--Log引擎


表引擎是clickhouse设计实现中的一大特色表引擎(即表的类型)决定了

  1. 数据的存储方式和位置,写到哪里以及从哪里读取数据
  2. 支持哪些查询以及如何支持
  3. 并发数据访问
  4. 索引的使用(如果存在)
  5. 是否可以执行多线程请求
  6. 数据复制参数,是否可以存储数据副本
  7. 分布式引擎实现分布式

Log系列引擎

Log家族具有最小功能的轻量级引擎,当需要快速写入许多小表(最多约100万行)并在以后的整体读取它们时,该类型的引擎是最有效的

一.TinyLog引擎

最简单的表引擎,用于将数据存储在磁盘上,每列都存储在单独的压缩文件中,写入时,数据将附加到文件末尾,该引擎没有并发控制
1.最简单的引擎
2.没有索引,没有标记块、
3.写是追加写
4.数据以列字段文件存储
5.不允许同时读写(insert into a select * from b会将表存储结构损坏,如果误操作需要删除表目录,删除元数据)

create table tb_tinyLog(
id UInt8,
name String
)engine=TinyLog;

insert into tb_tinyLog values(1,'zs'),(2,'ls'),(3,'ww');
select * from tb_tinyLog;
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘
insert into tb_tinyLog values(4,'zl');   //追加写入select * from tb_tinyLog;
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
│  4 │ zl   │
└────┴──────┘
查看底层存储没有标记块文件夹

二.Log引擎

  1. 底层存储的文件中,*.bin 存储每个字段的数据
  2. 底层存储的文件中,mark.mrk 数据块标记
  3. 支持多线程处理
  4. 并发读写
create table tb_Log(
id UInt8,
name String
)engine=Log;

insert into tb_Log values(1,'zs'),(2,'ls'),(3,'ww');
select * from tb_Log;
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘

insert into tb_Log values(1,'zs'),(2,'ls'),(3,'ww');  //追加写入
select * from tb_Log;
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘

insert into tb_Log select * from tb_Log;   //并发读写
select * from tb_Log;
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘

三.StripeLog引擎

  1. 底层存储的文件中,data.bin存储所有数据
  2. 底层存储的文件中,index.mrk对数据建立索引
  3. 底层存储的文件中,size.json数据大小
  4. 并发读写
create table tb_stripeLog(
id UInt8,
name String
)engine=StripeLog;

insert into tb_stripeLog values(1,'zs'),(2,'ls'),(3,'ww');
select * from tb_stripeLog;
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘

insert into tb_stripeLog values(1,'zs'),(2,'ls'),(3,'ww');   //追加写入
select * from tb_stripeLog;
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘
┌─id─┬─name─┐
│  1 │ zs   │
│  2 │ ls   │
│  3 │ ww   │
└────┴──────┘

Log和StripeLog引擎支持

  • 并发访问数据的锁
  • insert请求执行过程中表会被锁定,并且其他的读写数据的请求都会等待直到锁定被解除,如果没有写数据的请求,任意数量的读请求都可以并发执行。
  • 并行读取数据。
  • 在读数据时,clickhouse使用多线程,每个线程处理不同的数据块
  • Log引擎为表中的每一列使用不同的文件,StripeLog将所有的数据存储在一个文件中,因此StripeLog引擎在操作系统中使用更少的描述符,但是Log引擎提供更高的读性能。
  • TinyLog引擎是该系列中最简单的引擎并且提供了最少的功能和最低的性能。TinyLog引擎不支持并行读取和并发数据访问,并将每一列存储在不同的文件中,它比其余两种支持并行读取的引擎的读取速度更慢,并且使用了和Log引擎同样多的描述符,可以在简单的低负载的情境下使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值