当前位置: 首页 > news >正文

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大小的信息。

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


相关文章:

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

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…...

3.1 计算机网络和网络设备

数据参考:CISP官方 目录 计算机网络基础网络互联设备网络传输介质 一、计算机网络基础 1、ENIAC:世界上第一台计算机的诞生 1946年2月14日,宾夕法尼亚大学诞生了世界上第一台计算机,名为电子数字积分计算机(ENIAC…...

值得中国人民大学与加拿大女王大学金融硕士中的金融人观看的五部电影

积金累玉的机会每个人都会把握,那么学习可以实现,生活娱乐一样可以。当电影遇见金融会产生怎样的化学变化呢?今天我们就带着这样的疑问来一起走进英国时报发布的经典电影,也是最值得中国人民大学与加拿大女王大学金融硕士中的金融…...

【数据库】Redis可以替代Mysql吗

Redis和Mysql的搭配 Redis可以替代Mysql吗什么是RedisRedis适用的场景以及优点Redis的缺点 什么是MysqlMysql的优点Mysql缺点 总结 Redis可以替代Mysql吗 Redis不能代替MySQL, Redis和MySQL只能是一种互补。 什么是Redis Redis是一种非关系型数据库,也…...

5 指针与多维数组:多维数组在内存中的存储与指针的关系

推荐最近在工作学习用的一款好用的智能助手AIRight 网址是www.airight.fun。 指针与多维数组:多维数组在内存中的存储与指针的关系 引言 多维数组是数据结构中常见且重要的概念,它是由多个一维数组组成的数据集合。在计算机内存中,多维数组…...

Spring 创建 Bean 的三种方式

在使用 Spring 框架后,对象以 Bean 的形式统一交给 IOC 容器去创建和管理。现阶段主流的方式是基于 SpringBoot 框架,基于注解的方式实现 Bean 的创建,但在原生 Spring 框架中其实存在三种创建 Bean 的方式。 一、基础类 BeanProcess 实体类…...

软工导论知识框架(五)面向对象方法学

传统软件工程方法学适用于中小型软件产品开发; 面向对象软件工程方法学适用于大型软件产品开发。 一.四要素 对象+类+继承+传递消息实现通信 二.概念 1.对象:具有相同状态的一组操作的集合,对状态和操作…...

MyBatisPlus代码生成器

首先需要mybaits-plus依赖和自动代码生成器依赖 <!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><!-…...

文件传输软件常见问题解决办法大全

文件传输软件是我们工作中不可缺少的一种工具&#xff0c;它可以帮助我们快速、安全、稳定地传输各种文件&#xff0c;如文档、图片、视频等。但是在使用文件传输软件的过程中&#xff0c;我们也可能会遇到一些问题&#xff0c;影响我们的工作效率和传输质量。那么&#xff0c;…...

springboot工程测试临时数据修改技巧

目录 properties临时属性测试注入 args临时参数测试注入 bean配置类属性注入&#xff08;Import&#xff09; SpringBootTest是一个注解&#xff0c;用于测试Spring Boot应用程序。它可用于指示Spring Boot测试应用程序的启动点&#xff0c;并为测试提供一个可用的Spring应用…...

Echarts 清空画布空白以及鼠标悬浮提示信息格式化问题

清空画布用clear()会导致图表空白 const option1 = this.myEchart1.getOption()const option2 = this.myEchart2.getOption()const option3 = this.myEchart3.getOption()// 清空数据option1.series = []option1.xAxis[0].data = []option2.series = []option2.xAxis[0].data …...

数据结构入门:栈

目录 前言 1. 栈 1.1栈的概念及结构 1.2 栈的实现 1.2.1 栈的定义 1.2.2 栈的初始化 1.2.3 入栈 1.2.4 出栈 1.2.5 栈的元素个数 1.2.6 栈顶数据 1.2.7 栈的判空 2.栈的应用 2.1 题目一&#xff1a;括号匹配 2.1.1 思路 2.1.2 分析 2.1.3 题解 总结 前言 无论你是计算机科学专…...

《UNUX环境高级编程》(14)高级I/O

1、引言 2、 非阻塞I/O 系统调用分为两类&#xff1a;低速系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用&#xff0c;包括&#xff1a; 如果某些文件类型&#xff08;如读管道、终端设备和网络设备&#xff09;的数据并不存在&#xff0c;读操作…...

第5讲:如何构建类的方法

【分享成果&#xff0c;随喜正能量】在这个社会上&#xff0c;对别人好一点&#xff0c;多站在别人的角度考虑&#xff0c;不要为小事争执&#xff0c;不要取笑他人&#xff0c;不要在别人背后嚼舌根&#xff0c;更不能逼人太甚。凡事退一步&#xff0c;对你有好处。。 《VBA中…...

【TypeScript】TS接口interface类型(三)

【TypeScript】TS接口interface类型&#xff08;三&#xff09; 【TypeScript】TS接口interface类型&#xff08;三&#xff09;一、接口类型二、实践使用2.1 常规类型2.2 设置属性只读 readonly2.3 设置索引签名2.4 设置可选属性2.5 函数类型接口 一、接口类型 TypeScript中的…...

Python web实战之Django 的 RESTful API 设计详解

关键词: Python, Web 开发, Django, RESTful API 1 API的一些事儿 1.1 什么是API&#xff1f; API是应用程序编程接口&#xff08;Application Programming Interface&#xff09;的缩写。它是一种定义了不同软件组件之间交互方式的规范。API允许不同的应用程序之间进行通信和…...

Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)

Python 程序设计入门&#xff08;014&#xff09;—— Python 的 Lambda 函数&#xff08;匿名函数&#xff09; 目录 Python 程序设计入门&#xff08;014&#xff09;—— Python 的 Lambda 函数&#xff08;匿名函数&#xff09;一、匿名函数的定义二、匿名函数的特征三、匿…...

【MySQL系列】表约束的学习

「前言」文章内容大致是MySQL的表的约束。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL表的约束1.1 空属性1.2 默认值&#xff08;default&#xff09;1.3 列描述&#xff08;comment&#xff09;1.4 zerofill1.5 主键&#xff08;primary ke…...

低功耗LoRaWAN国产低功耗LoRa+RF射频前端芯片XD6500S

目录 典型应用XD6500S简介芯片特性 LoRa系列选型参考 LoRa是为低数据速率、远距离距离和超低功耗而优化的扩频协议&#xff0c;用于LPWAN应用程序的通信。 典型应用 一、智慧农业   智慧农业大田解决方案利用传感设备、自动化控制设备、气象站实时监测采集田间土壤墒情、气象…...

【基础IO】文件系统 {磁盘的物理结构,存储结构,逻辑结构;CHS 和 LBA 寻址方式;磁盘分区和块组;文件inode;软硬链接}

文件系统 文件分为&#xff1a; 内存文件&#xff1a;被进程打开的文件&#xff0c;文件被加载到内存中供进程快速读写。磁盘文件&#xff1a;没有被打开的文件&#xff0c;保存在磁盘上。磁盘文件被分门别类的存储和管理&#xff0c;用于支持更好的存取。 提示&#xff1a; …...

设计模式(代理设计模式)

代理模式解释清楚&#xff0c;所以如果想对一个类进行功能上增强而又不改变原来的代码情况下&#xff0c;那么只需要让这个类代理类就是我们的顺丰&#xff0c;对吧?并行增强就可以了。具体增强什么?在哪方面增强由代理类进行决定。 代码实现就是使用代理对象代理相关的逻辑…...

【C++快读快写】

算法竞赛中用于解决卡常问题 int rd(){int k 0;char c getchar();while(!isdigit(c)){c getchar();}while(isdigit(c)){k (k << 1) (k << 3) (c^0), c getchar();}return k; }void wr(int x) {if (x > 9)wr(x / 10);putchar((x % 10) ^ 0); }用法&#x…...

Python_day47

作业&#xff1a;对比不同卷积层热图可视化的结果 一、不同卷积层的特征特性 卷积层类型特征类型特征抽象程度对输入的依赖程度低层卷积层&#xff08;如第 1 - 3 层&#xff09;边缘、纹理、颜色、简单形状等基础特征低高&#xff0c;直接与输入像素关联中层卷积层&#xff08…...

【CSS-4】掌握CSS文字样式:从基础到高级技巧

文字是网页内容的核心载体&#xff0c;良好的文字样式设计不仅能提升可读性&#xff0c;还能增强网站的整体视觉效果。本文将全面介绍CSS中控制文字样式的各种属性和技巧&#xff0c;帮助您打造专业级的网页排版。 1. 基础文字属性 1.1 字体设置 (font-family) body {font-f…...

UOS无法安装deb软件包

UOS无法安装deb软件包 问题描述解决办法: 关闭安全中心的应用隔离结果验证 问题描述 UOS安装Linux微信的deb包时&#xff0c;无法正常安装 解决办法: 关闭安全中心的应用隔离 要关闭-安全中心的应用隔离后才可以正常软件和运行。 应用安全----》 允许任意应用。 结果验证 # …...

Neovim - 打造一款属于自己的编辑器(一)

文章目录 前言&#xff08;劝退&#xff09;neovim 安装neovim 配置配置文件位置第一个 hello world 代码拆分 neovim 配置正式配置 neovim基础配置自定义键位Lazy 插件管理器配置tokyonight 插件配置BufferLine 插件配置自动补全括号 / 引号 插件配置 前言&#xff08;劝退&am…...

获取 OpenAI API Key

你可以按照以下步骤来获取 openai.api_key&#xff0c;用于调用 OpenAI 的 GPT-4、DALLE、Whisper 等 API 服务&#xff1a; &#x1f9ed; 获取 OpenAI API Key 的步骤&#xff1a; ✅ 1. 注册或登录 OpenAI 账号 打开 https://platform.openai.com/ 使用你的邮箱或 Google/…...

【Android基础回顾】五:AMS(Activity Manager Service)

Android 的 AMS&#xff08;Activity Manager Service&#xff09;是 Android 系统中的核心服务之一&#xff0c;负责管理整个应用生命周期、任务栈、进程和四大组件&#xff08;Activity、Service、BroadcastReceiver、ContentProvider&#xff09;的运行。它运行在系统进程 s…...

接IT方案编写(PPT/WORD)、业务架构设计、投标任务

1、IT 方案编写&#xff08;PPT/WORD&#xff09;​ 定制化方案&#xff1a;根据客户需求&#xff0c;提供涵盖云计算、大数据、人工智能等前沿技术领域的 PPT/WORD 方案编写服务&#xff0c;精准提炼核心价值&#xff0c;呈现专业技术内容。​ 逻辑清晰架构&#xff1a;采用…...

Vue在线预览excel、word、ppt等格式数据。

目录 前言 1.安装库 2.预览文件子组件代码 3、新建store/system.ts 4、父页面进行使用 总结 前言 纯前端处理文件预览&#xff0c;包含excel、word、ppt、txt等格式&#xff0c;不需要后端服务器进行部署&#xff0c;并且内网也可以使用。 1.安装库 npm install vue-offi…...