Cilck House Log系列表引擎

目录

系列表引擎的特点

TinyLog表引擎使⽤

StripLog表引擎

Log表引擎 


系列表引擎的特点

共性特点
  • 数据存储在磁盘上
  • 当写数据时,将数据追加到⽂件的末尾
  • 不⽀持 并发读写 ,当向表中写⼊数据时,针对这张表的查询会被阻塞,直⾄写⼊动作结束
  • 不⽀持索引
  • 不⽀持原⼦写:如果某些操作 ( 异常的服务器关闭 ) 中断了写操作,则可能会获得带有损坏数据的表
  • 不⽀持 ALTER 操作 ( 这些操作会修改表设置或数据,⽐如 delete update 等等 )
区别
  • TinyLog
        TinyLog Log 系列引擎中功能简单、性能较低的引擎。它的存储结构由数据⽂件和元数据两部分组成。其 中, 数据⽂件是按列独⽴存储的,也就是说每⼀个列字段都对应⼀个⽂件 。除此之外, TinyLog 不⽀持并发数
  • 据读取。
  • StripLog ⽀持并发读取数据⽂件,当读取数据时, ClickHouse 会使⽤多线程进⾏读取,每个线程处理⼀个单 独的数据块。另外, StripLog 将所有列数据存储在同⼀个⽂件中 ,减少了⽂件的使⽤数量。
  • Log ⽀持并发读取数据⽂件,当读取数据时, ClickHouse 会使⽤多线程进⾏读取,每个线程处理⼀个单独的数 据块。 Log 引擎会将每个列数据单独存储在⼀个独⽴⽂件中

TinyLog表引擎使⽤

该引擎适⽤于 ⼀次写⼊,多次读取的场景 。对于处理⼩批数据的中间表可以使⽤该引擎。值得注意的是,使⽤⼤量 的⼩表存储数据,性能会很低。
CREATE TABLE emp_tinylog4 (
emp_id UInt16 COMMENT '员工id',
name String COMMENT '员工姓名',
work_place String COMMENT '工作地点',
age UInt8 COMMENT '员工年龄',
depart String COMMENT '部门',
salary Decimal32(2) COMMENT '工资') 
ENGINE=TinyLog();
INSERT INTO emp_tinylog4 VALUES (1,'tom','上海',25,'技术部',20000),(2,'jack','上海',26,'人事部',10000);
INSERT INTO emp_tinylog4 VALUES (3,'bob','北京',33,'财务部',50000),(4,'tony','杭州',28,'销售事部',50000);
进⼊默认数据存储⽬录,查看底层数据存储形式 , 可以看出: TinyLog 引擎表每⼀列都对应的⽂件:
当我们执⾏ ALTER 操作 时会报错,说明该表引擎不⽀持 ALTER 操作
node1 :) ALTER TABLE emp_tinylog4 DELETE WHERE emp_id = 5;
ALTER TABLE emp_tinylog
DELETE WHERE emp_id = 5
Received exception from server (version 20.5.2):
Code: 48. DB::Exception: Received from localhost:9009. DB::Exception: Mutations are not
supported by storage TinyLog.

StripLog表引擎

相⽐ TinyLog ⽽⾔, StripeLog 拥有更⾼的查询性能(拥有 .mrk 标记⽂件,⽀持并⾏查询),同时其使⽤了更少的 ⽂件描述符(所有数据使⽤同⼀个⽂件保存)。
创建 StripeLog
CREATE TABLE emp_stripelog4 (
emp_id UInt16 COMMENT '员工id',
name String COMMENT '员工姓名',
work_place String COMMENT '工作地点',
age UInt8 COMMENT '员工年龄',
depart String COMMENT '部门',
salary Decimal32(2) COMMENT '工资') 
ENGINE=StripeLog;
-- 插⼊数据
INSERT INTO emp_stripelog4 VALUES (1,'tom','上海',25,'技术部',20000),(2,'jack','上海',26,'人事部',10000);
INSERT INTO emp_stripelog4 VALUES (3,'bob','北京',33,'财务部',50000),(4,'tony','杭州',28,'销售事部',50000);
-- 查询数据
-- 由于是分两次插⼊数据,所以查询时会有两个数据块
进⼊默认数据存储⽬录,查看底层数据存储形式
可以看出 StripeLog 表引擎对应的存储结构包括三个⽂件:
  • data.bin :数据⽂件,所有的列字段使⽤同⼀个⽂件保存,它们的数据都会被写⼊ data.bin
  • index.mrk :数据标记,保存了数据在 data.bin ⽂件中的位置信息 ( 每个插⼊数据块对应列的 offset) ,利⽤数据 标记能够使⽤多个线程,以并⾏的⽅式读取 data.bin 内的压缩数据块,从⽽提升数据查询的性能。
  • sizes.json :元数据⽂件,记录了 data.bin index.mrk ⼤⼩的信息
注:
1 StripeLog 引擎将所有数据都存储在了⼀个⽂件中,对于每次的 INSERT 操作, ClickHouse 会将 数据块
加到表⽂件的末尾
2 StripeLog 引擎同样不⽀持 ALTER UPDATE ALTER DELETE 操作

Log表引擎 

Log 引擎表适⽤于临时数据 ,⼀次性写⼊、测试场景。 Log 引擎结合了 TinyLog 表引擎和 StripeLog 表引擎的⻓处, Log 系列引擎中性能最⾼的表引擎。
CREATE TABLE emp_log4 (
emp_id UInt16 COMMENT '员工id',
name String COMMENT '员工姓名',
work_place String COMMENT '工作地点',
age UInt8 COMMENT '员⼯年龄',
depart String COMMENT '部门',
salary Decimal32(2) COMMENT '工资')
ENGINE=Log;
-- 查询数据,
-- 由于是分两次插⼊数据,所以查询时会有两个数据块
INSERT INTO emp_log4 VALUES (1,'tom','上海',25,'技术部',20000),(2,'jack','上海',26,'人事部',10000);
INSERT INTO emp_log4 VALUES (3,'bob','北京',33,'财务部',50000),(4,'tony','杭州',28,'销售事部',50000);
进⼊默认数据存储⽬录,查看底层数据存储形式
Log 引擎的存储结构包含三部分:
  • .bin :数据⽂件,数据⽂件按列单独存储
  • __marks.mrk :数据标记,统⼀保存了数据在各个 .bin ⽂件中的位置信息。利⽤数据标记能够使⽤多个线程, 以并⾏的⽅式读取。 .bin 内的压缩数据块,从⽽提升数据查询的性能。
  • sizes.json :记录了 .bin __marks.mrk ⼤⼩的信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值