ClickHouse(九):Clickhouse表引擎 - Log系列表引擎

 

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


目录

Log系列表引擎

1. TinyLog

2. StripeLog

3. Log


MySQL的数据表有InnoDB和MyISAM存储引擎,不同的存储引擎提供不同的存储机制、索引方式等功能,也可以称之为表类型。在ClickHouse中也有表引擎。

表引擎在ClickHouse中的作用十分关键,直接决定了数据如何存储和读取、是否支持并发读写、是否支持index索引、支持的query种类、是否支持主备复制等。

ClickHouse提供了大约28种表引擎,各有各的用途,比如有Log系列用来做小表数据分析,MergeTree系列用来做大数据量分析,而Integration系列则多用于外表数据集成。再考虑复制表Replicated系列,分布式表Distributed等,纷繁复杂。

ClickHouse表引擎一共分为四个系列,分别是Log系列、MergeTree系列、Integration系列、Special系列。其中包含了两种特殊的表引擎Replicated、Distributed,功能上与其他表引擎正交,根据场景组合使用。

​​​​​​​Log系列表引擎

Log系列表引擎功能相对简单,主要用于快速写入小表(1百万行左右的表),然后全部读出的场景,即一次写入,多次查询。Log系列表引擎包含:TinyLog、StripeLog、Log三种引擎。

  • 几种Log表引擎的共性是:
  1. 数据被顺序append写到本地磁盘上。
  2. 不支持delete、update修改数据。
  3. 不支持index(索引)。
  4. 不支持原子性写。如果某些操作(异常的服务器关闭)中断了写操作,则可能会获得带有损坏数据的表。
  5. insert会阻塞select操作。当向表中写入数据时,针对这张表的查询会被阻塞,直至写入动作结束。
  • 它们彼此之间的区别是:
  1. TinyLog:不支持并发读取数据文件,查询性能较差;格式简单,适合用来暂存中间数据。
  2. StripLog:支持并发读取数据文件,查询性能比TinyLog好;将所有列存储在同一个大文件中,减少了文件个数。
  3. Log:支持并发读取数据文件,查询性能比TinyLog好;每个列会单独存储在一个独立文件中。

1. TinyLog

TinyLog是Log系列引擎中功能简单、性能较低的引擎。

它的存储结构由数据文件和元数据两部分组成。其中,数据文件是按列独立存储的,也就是说每一个列字段都对应一个文件。

由于TinyLog数据存储不分块,所以不支持并发数据读取,该引擎适合一次写入,多次读取的场景,对于处理小批量中间表的数据可以使用该引擎,这种引擎会有大量小文件,性能会低。

  • 示例:
#在ch中创建库 newdb,并使用node1 :) create database newdb;node1 :) use newdb;#创建表t_tinylog 表,使用TinyLog引擎node1 :) create table t_tinylog(id UInt8,name String,age UInt8) engine=TinyLog;#向表中插入数据node1 :) insert into t_tinylog values (1,'张三',18),(2,'李四',19),(3,'王五',20);#查询表中的数据node1 :) select * from t_tinylog;SELECT *FROM t_tinylog┌─id─┬─name─┬─age─┐│  1 │ 张三  │  18  ││  2 │ 李四  │  19  │ │  3 │ 王五  │  20  │└────┴──────┴─────┘3 rows in set. Elapsed: 0.003 sec.#在表中删除一条数据,这里是不支持delete。node1 :) delete from t_tinylog where id = 1;//语句不适合CHnode1 :) alter table t_tinylog delete where id = 1;:Exception: Mutations are not supported by storage TinyLog.

当在newdb库中创建表t_tinylog后,在ClickHouse保存数据的目录/var/lib/clickhouse/data/newdb/下会多一个t_tinylog目录,如图所示:

在向表t_tinylog中插入数据后,进入“t_tinylog”目录,查看目录下的文件,如下图所示:

我们可以发现,表t_tinylog中的每个列都单独对应一个*.bin文件,同时还有一个sizes.json文件存储元数据,记录了每个bin文件中数据大小。

​​​​​​​2. StripeLog

相比TinyLog而言,StripeLog数据存储会划分块,每次插入对应一个数据块,拥有更高的查询性能(拥有.mrk标记文件,支持并行查询)。StripeLog 引擎将所有列存储在一个文件中,使用了更少的文件描述符。对每一次 Insert 请求,ClickHouse 将数据块追加在表文件的末尾,逐列写入。StripeLog 引擎不支持 ALTER UPDATE 和 ALTER DELETE 操作。

  • 示例:
#在库 newdb中创建表 t_stripelog,使用StripeLog引擎node1 :) create table t_stripelog(id UInt8,name String,age UInt8) engine = StripeLog;#向表t_stripelog中插入数据,这里插入分多次插入,会将数据插入不同的数据块中node1 :) insert into t_stripelog values (1,'张三',18);node1 :) insert into t_stripelog values (2,'李四',19);#查询表 t_stripelog数据node1 :) select * from t_stripelog;SELECT *FROM t_stripelog┌─id─┬─name─┬─age─┐│  1  │ 张三  │  18 │└────┴──────┴─────┘┌─id─┬─name─┬─age─┐│  2  │ 李四  │  19 │└────┴──────┴─────┘2 rows in set. Elapsed: 0.003 sec.

当在newdb库中创建表 t_stripelog后,在ClickHouse保存数据的目录/var/lib/clickhouse/data/newdb/下会多一个t_stripelog目录,如图所示:

在向表t_stripelog中插入数据后,进入“t_stripelog”目录,查看目录下的文件,如下图所示:

我们可以发现只有三个文件:

  1. data.bin:数据文件,所有列字段都写入data.bin文件中。
  2. index.mrk:数据标记文件,保存了数据在data.bin 文件中的位置信息,即每个插入数据列的offset信息,利用数据标记能够使用多个线程,并行度取data.bin压缩数据,提升查询性能。
  3. sizes.json:元数据文件,记录了data.bin和index.mrk大小信息。

3. Log

Log引擎表适用于临时数据,一次性写入、测试场景。Log引擎结合了TinyLog表引擎和StripeLog表引擎的长处,是Log系列引擎中性能最高的表引擎。

Log表引擎会将每一列都存在一个文件中,对于每一次的INSERT操作,会生成数据块,经测试,数据块个数与当前节点的core数一致。

  • 示例:
#在newdb中创建表t_log 使用Log表引擎node1 :) create table t_log(id UInt8 ,name String ,age UInt8 ) engine = Log;#向表 t_log中插入数据,分多次插入,插入后数据存入数据块node1 :) insert into t_log values (1,'张三',18);node1 :) insert into t_log values (2,'李四',19);node1 :) insert into t_log values (3,'王五',20);node1 :) insert into t_log values (4,'马六',21);node1 :) insert into t_log values (5,'田七',22);#查询表t_log中的数据node1 :) select * from t_log;SELECT *FROM t_log┌─id─┬─name─┬─age─┐│  1  │ 张三   │  18  ││  2  │ 李四   │  19  │└────┴─────┴─────┘┌─id─┬─name─┬─age─┐│  3  │ 王五  │  20   ││  4  │ 马六  │  21   ││  5  │ 田七  │  22   │└────┴─────┴─────┘5 rows in set. Elapsed: 0.004 sec.

当在newdb库中创建表 t_log后,在ClickHouse保存数据的目录/var/lib/clickhouse/data/newdb/下会多一个t_log目录,如图所示:

在向表t_log中插入数据后,进入“t_log”目录,查看目录下的文件,如下图所示:

我们发现表t_log中的每个列都对应一个*.bin文件。其他两个文件的解释如下:

  1. __marks.mrk:数据标记,保存了每个列文件中的数据位置信息,利用数据标记能够使用多个线程,并行度取data.bin压缩数据,提升查询性能。
  2. sizes.json:记录了*.bin 和__mark.mrk大小的信息。

👨‍💻如需博文中的资料请私信博主。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java反射机制原理、获取Class方式和其应用场景

1、反射是什么: 反射是一种动态地获取和操作类信息的行为。类信息包括类的属性、方法、构造函数等。 类信息在Java中通常存储在.class文件中。当我们编写Java代码并进行编译时,编译器(javac)将源代码转换为字节码,并将…

Mapper层公共字段自动填充

公共字段自动填充 问题分析 我们在进行一些新增修改操作时,我们需要设置创建时间、创建人、修改时间、修改人等字段。 这些字段属于公共字段,也就是也就是在我们的系统中很多表中都会有这些字段,如下: 序号字段名含义数据类型1c…

【分布式流控组件 Sentinel 快速入门】——图文详解操作流程

💧 分布式流控组件 S e n t i n e l 快速入门 \color{#FF1493}{分布式流控组件 Sentinel 快速入门} 分布式流控组件Sentinel快速入门💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客&#…

智慧工地云平台源码,基于微服务+Java+Spring Cloud +UniApp +MySql开发

智慧工地可视化系统利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术,通过工地中台、三维建模服务、视频AI分析服务等技术支撑,实现智慧工地高精度动态仿真,趋势分析、预测、模拟,建设智能化、标准化的智慧工地…

华为云交付

文章目录 一、华为云-公有云架构华为公有云的主要服务1.华为云服务—计算类2.华为云服务——存储类3.华为云服务—网络类4.华为云服务—管理和监督类5.华为云数据库 二、待续 一、华为云-公有云架构 华为公有云的主要服务 ECS:弹性云服务器( Elastic Cl…

穷举深搜暴搜回溯剪枝(3)

一)字母大小写全排列 784. 字母大小写全排列 - 力扣(LeetCode) 1)从每一个字符开始进行枚举,如果枚举的是一个数字字符,直接忽视 如果是字母的话,进行选择是变还是不变 2)当进行遍历到叶子结点的时候,直接将…

(三)Node.js - 模块化

1. Node.js中的模块化 Node.js中根据模块来源不同,将模块分为了3大类,分别是: 内置模块:内置模块由Node.js官方提供的,例如fs、path、http等自定义模块:用户创建的每个.js文件,都是自定义模块…

jmeter 5.1彻底解决中文上传乱码

1.修改源码,然后重新打jar包,就是所有上传文件名重新获取文件名 参考链接:多种Jmeter中文乱码问题处理方法 - 51Testing软件测试网 2.修改Advanced,必须选java

RaabitMQ(三) - RabbitMQ队列类型、死信消息与死信队列、懒队列、集群模式、MQ常见消息问题

RabbitMQ队列类型 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中,拥有比较高的消息可靠性。 经典队列可以选择是否持久化(Durability)以及是否自动删除(Auto delete)两个属性。 Durability有两个选项,Durable和Transient。 Durable表…

【ARM Coresight 系列文章 2.5 - Coresight 寄存器:PIDR0-PIDR7,CIDR0-CIDR3 介绍】

文章目录 1.1 JEDEC 与 JEP1061.2 PIDR0-PIDR7(peripheral identification registers)1.2 CIDR0-CIDR3(Component Identification Registers) 1.1 JEDEC 与 JEP106 JEDEC和JEP106都是来自美国电子工业联合会(JEDEC,Joint Electron Device Engineering C…

深度学习(34)—— StarGAN(1)

深度学习(34)—— StarGAN(1) 文章目录 深度学习(34)—— StarGAN(1)1. 背景2. 基本思路3. 整体流程4. StarGAN v2(1) 网络结构(2) mapping network(3) style encoder(4)Loss 和之前…

4个顶级的支持消费级硬件的NeRF软件平台

似乎每天都有大量的创新发布,人们很容易感到不知所措。因此,让我们放慢脚步,看看4个主流的支持消费级硬件的NeRF 平台。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 1、Instant-NGP(Instant-NeRF) 2022 年…

计算机网络-三种交换方式

计算机网络-三种交换方式 电路交换(Circuit Switching) 电话交换机接通电话线的方式称为电路交换从通信资源分配的角度来看,交换(Switching)就是按照某种方式动态的分配传输线路的资源 电话交换机 为了解决电话之间通信两两之间连线过多,所以产生了电话…

认识 spring AOP (面向切面编程) - springboot

前言 本篇介绍什么是spring AOP, AOP的优点,使用场景,spring AOP的组成,简单实现AOP 并 了解它的通知;如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录 前言1. 什么是s…

快速制作美容行业预约小程序

随着科技的不断进步,移动互联网的快速发展,小程序成为了很多行业迅速发展的利器。对于美容行业来说,一款美容预约小程序不仅可以方便用户进行预约,还可以提升美容店铺的服务质量和管理效率。下面,我们来介绍一下如何快…

【云原生K8s】初识Kubernetes的理论基础

K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。 云原生基金会(CNCF)于2015年12月成立,隶属于Linux基金会。CNCF孵化的第一个项目…

iOS——Block循环引用

Capturing ‘self’ strongly in this block is likely to lead to a retain cycle 典型的循环引用 self持有了blockblock持有了self(self.name) 这样就形成了self -> block -> self的循环引用 解决办法 强弱共舞 使用 中介者模式 __weak typeof(self) weakSelf sel…

【Spring Boot】(二)Spring Boot 配置文件的探索之旅

文章目录 前言一、配置文件的作用二、配置文件的格式2.1 Spring Boot 配置文件格式2.2 properties 和 yml 的区别 三、properties 配置文件3.1 properties 基本语法3.2 配置文件的读取3.3 properties 优缺点分析 四、yml 配置文件说明4.1 yml 基本语法4.2 yml 使用案例4.3 yml …

fishing之第四篇使用案例一模拟登陆口

文章目录 一、访问钓鱼平台二、Sending Profiles(发件人邮箱配置)三、User&Groups(接收人邮件列表)四、Landing Pags(钓鱼页面配置)五、Email Templates(邮件内容配置)六、Campaigns七、攻击结果查看免责声明一、访问钓鱼平台 详细查看第二篇的gophish的搭建 二…

WebRTC 之音视频同步

在网络视频会议中, 我们常会遇到音视频不同步的问题, 我们有一个专有名词 lip-sync 唇同步来描述这类问题,当我们看到人的嘴唇动作与听到的声音对不上的时候,不同步的问题就出现了 而在线会议中, 听见清晰的声音是优先…