ClickHouse--04--数据库引擎、Log 系列表引擎、 Special 系列表引擎

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 1.数据库引擎
    • 1.1 Ordinary 默认数据库引擎
    • 1.2 MySQL 数据库引擎
      • MySQL 引擎语法
      • 字段类型的映射
  • 2.ClickHouse 表引擎
  • 3.Log 系列表引擎
      • 几种 Log 表引擎的共性是:
      • 它们彼此之间的区别是:
    • 3.1 TinyLog
    • 3.2 StripeLog
    • 3.3 Log
  • 4.Special 系列表引擎
    • 4.1 Memory
    • 4.2 Merge
    • 4.3 Distributed


1.数据库引擎

在这里插入图片描述

  • ClickHouse 中支持在创建数据库时指定引擎,目前比较常用的两种引擎为默认引擎
    和 MySQL 数据库引擎。

1.1 Ordinary 默认数据库引擎

Ordinary 就是 ClickHouse 中默认引擎,如果不指定数据库引擎创建的就是Ordinary 数据库引擎,在这种数据库下面可以使用任意表引擎。创建时需要注意,Ordinary 首字母需要大写,不然会抛出异常。
在这里插入图片描述
在这里插入图片描述

1.2 MySQL 数据库引擎

MySQL 引擎用于将远程的 MySQL 服务器中的表映射到 ClickHouse 中,并允许对表进行INSERT 插入和 SELECT 查询,方便在 ClickHouse 与 MySQL 之间进行数据交换。

  • 这里不会将 MySQL 的数据同步到 ClickHouse 中,ClickHouse 就像一个壳子,可以将 MySQL 的表映射成ClickHouse 表,使用 ClickHouse 查询 MySQL 中的数据,在 MySQL 中进行的 CRUD 操作,可以同时映射到 ClickHouse 中。
  • MySQL 数据库引擎会将对其的查询转换为 MySQL 语法并发送到 MySQL 服务器中,因此可以执行诸如 SHOW TABLES 或 SHOW CREATE TABLE 之类的操作,但是不允许创建表、修改表、删除数据、重命名操作

MySQL 引擎语法

ClickHouse 中创建库使用 MySQL 引擎语法如下:
在这里插入图片描述
在这里插入图片描述

字段类型的映射

  • 在 ClickHouse 中使用 MySQL 引擎建库,将 MySQL 库中数据映射到 ClickHouse中,mysql 库中表字段类型与 ClickHouse 表字段类型的映射如下,这里每种类型在ClickHouse 中都支持 Nullable,即可空。
    在这里插入图片描述

在这里插入图片描述

2.ClickHouse 表引擎

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

表引擎在 ClickHouse 中的作用十分关键,直接决定了

  • 数据如何存储和读取
  • 是否支持并发读写
  • 是否支持 index 索引
  • 支持的 query 种类
  • 是否支持主备复制

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

  • Log 系列用来做小表数据分析
  • MergeTree 系列用来做大数据量分析
  • Integration 系列则多用于外表数据集成。
  • 再考虑复制表 Replicated 系列
  • 分布式表 Distributed 等,

3.Log 系列表引擎

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

Log 系列表引擎包含:

  • TinyLog、
  • StripeLog、
  • Log

几种 Log 表引擎的共性是:

  • 数据被顺序 append 写到本地磁盘上。

  • 不支持 delete、update 修改数据。

  • 不支持 index(索引)。

  • 不支持原子性写。如果某些操作(异常的服务器关闭)中断了写操作,则可能会获
    得带有损坏数据的表。

  • insert 会阻塞 select 操作。当向表中写入数据时,针对这张表的查询会被阻塞,
    直至写入动作结束。

它们彼此之间的区别是:

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

在这里插入图片描述

3.1 TinyLog

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

  • 它的存储结构由数据文件和元数据两部分组成。其中,数据文件是按列独立存储的,也就是说每一个列字段都对应一个文件。
  • 由于 TinyLog 数据存储不分块,所以不支持并发数据读取,该引擎适合一次写入,多次读取的场景,对于处理小批量中间表的数据可以使用该引擎,这种引擎会有大量小文件,性能会低。

示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 StripeLog

相比 TinyLog 而言,StripeLog 数据存储会划分块,每次插入对应一个数据块,拥有更高的查询性能(拥有.mrk 标记文件,支持并行查询)

  • StripeLog 引擎将所有列存储在一个文件中,使用了更少的文件描述符。对每一次 Insert 请求,ClickHouse 将
    数据块追加在表文件的末尾,逐列写入。
  • StripeLog 引擎不支持 ALTER UPDATE 和 ALTER DELETE 操作。

示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 Log

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

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

示例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.Special 系列表引擎

在这里插入图片描述

4.1 Memory

Memory 表引擎直接将数据保存在内存中,ClickHouse 中的 Memory 表引擎具有以下特点:

  • Memory 引擎以未压缩的形式将数据存储在 RAM 中,数据完全以读取时获得的形式存储。
  • 并发数据访问是同步的,锁范围小,读写操作不会相互阻塞。
  • 不支持索引。
  • 查询是并行化的,在简单查询上达到最大速率(超过 10 GB /秒),在相对较少的行(最多约 100,000,000)上有高性能的查询。
  • 没有磁盘读取,不需要解压缩或反序列化数据,速度更快(在许多情况下,与MergeTree 引擎的性能几乎一样高)。
  • 重新启动服务器时,表存在,但是表中数据全部清空
  • Memory 引擎多用于测试。

示例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:”Memory”表引擎写法固定,不能小写。同时创建好表 t_memory 后,在对应的磁盘目录/var/lib/clickhouse/data/newdb 下没有“t_memory”目录,基于内存存储,当重启 ClickHouse 服务后,表 t_memory 存在,但是表中数据全部清空。

4.2 Merge

Merge 引擎 (不要跟 MergeTree 引擎混淆) 本身不存储数据,但可用于同时从任意多个其他的表中读取数据,这里需要多个表的结构相同,并且创建的 Merge 引擎表的结构也需要和这些表结构相同才能读取。

  • 读是自动并行的,不支持写入
  • 读取时,那些被真正读取到数据的表如果设置了索引,索引也会被使用。
    在这里插入图片描述
    示例:
    在这里插入图片描述
    在这里插入图片描述

4.3 Distributed

Distributed 是== ClickHouse 中 分 布 式 引 擎== , 之 前 所 有 的 操 作 虽 然 说 是 在ClickHouse 集群中进行的,但是实际上是在 node1 节点中单独操作的,与 node2、node3无关,使用分布式引擎声明的表才可以在其他节点访问与操作。

Distributed 引擎和 Merge 引擎类似,本身不存放数据,功能是在不同的 server上把多张相同结构的物理表合并为一张逻辑表。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的语句中使用了 ON CLUSTER 分布式 DDL(数据库定义语言),这意味着在集群的每个分片节点上,都会创建一张 Distributed 表,这样便可以从其中任意一端发起对所有分片的读、写请求。

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

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

相关文章

项目02《游戏-10-开发》Unity3D

【完成本集功能后共享1-10集整套代码】 基于 项目02《游戏-09-开发》Unity3D , 任务:传送至其他场景, 首先在场景中加入传送门, 设置人物标签, using UnityEngine; using UnityEngine.SceneManagement; u…

调用讯飞火星AI大模型WebAPI

调用讯飞火星AI大模型 记录一次调用讯飞AI大模型的过程 官方文档 首先,去官网申请资格,获得必要秘钥等 再编写url,该url存在编码要求,具体看官网url编写 具体代码如下: getWebsocketUrl() {return new Promise((resol…

腾讯云4核8G服务器多少钱?646元一年零3个月

腾讯云服务器4核8G配置优惠价格表,轻量应用服务器和CVM云服务器均有活动,云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元,5年6490.44元,轻量应用服务器4核8G12M带宽一年446元、529元15个月,腾讯云百科txybk.com分…

Pytorch的可视化

1 使用 wandb进行可视化训练过程 本文章将从wandb的安装、wandb的使用、demo的演示进行讲解。 1.1 如何安装wandb? wandb的安装比较简单,在终端中执行如下的命令即可: pip install wandb在安装完成之后,我们需要,去…

Springboot拦截器中跨域失效的问题、同一个接口传入参数不同,一个成功,一个有跨域问题、拦截器和@CrossOrigin和@Controller

Springboot拦截器中跨域失效的问题 一、概述 1、具体场景 起因: 同一个接口,传入不同参数进行值的修改时,一个成功,另一个竟然失败,而且是跨域问题拦截器内的request参数调用getHeader方法时,获取不到前端…

如何写好一个简历

如何编写求职简历 论Java程序员求职中简历的重要性 好简历的作用 在求职过程中,一份好的简历是非常重要的,它甚至可以直接决定能否被面试官认可。一份出色或者说是成功的个人简历,最根本的作用是能让看这份简历的人产生一定要见你的强烈愿…

Idea Git Review插件

idea git plugin 添加了一些常用的小插件 可以右键打开git bash窗口 可以右键选中文字点击baidu fanyi 可以通过搜索git用户名 指定开始时间查询某个版本自己提交的所有代码文件 可以通过点击蓝色行数,跳转到指定的改动代码块 资源地址: git-pl…

伦敦金是现货黄金吗?

伦敦金属现货黄金交易的一种形式。投资者可以通过伦敦金市场直接买卖黄金,以实现投资收益。伦敦金市场具有高度流动性和透明度,是全球投资者广泛参与的贵金属交易市场之一。 什么是现货黄金? 现货黄金是指实物黄金的交易,投资者可…

C/C++模板初阶

目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.1 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通用的交换函数呢? void Swap(int&…

百面嵌入式专栏(面试题)驱动开发面试题汇总 2.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍驱动开发面试题 。 1、Linux系统的组成部分? Linux内核、Linux文件系统、Linux shell、Linux应用程序。 2、Linux内核的组成部分? (1)第一种分类方式:内存管理子系统、进程管理子系统、文件管理子系…

[C#]winform制作仪表盘好用的表盘控件和使用方法

【仪表盘一般创建流程】 在C#中制作仪表盘文案(通常指仪表盘上的文本、数字或指标显示)涉及到使用图形用户界面(GUI)组件,比如Windows Forms、WPF (Windows Presentation Foundation) 或 ASP.NET 等。以下是一个使用W…

【上海大学数字逻辑实验报告】七、中规模元件及综合设计

一、实验目的 掌握中规模时序元件的测试。学会在Quartus II上设计序列发生器。 二、实验原理 74LS161是四位可预置数二进制加计数器,采用16引脚双列直插式封装的中规模集成电路,其外形如下图所示: 其各引脚功能为: 异步复位输…

Microsoft Excel 加载数据分析工具

Microsoft Excel 加载数据分析工具 1. 打开 Excel,文件 -> 选项2. 加载项 -> 转到…3. 分析工具库、分析工具库 - VBA4. 打开 Excel,数据 -> 数据分析References 1. 打开 Excel,文件 -> 选项 2. 加载项 -> 转到… ​​​ 3…

【Linux】线程概念和线程控制

线程概念 一、理解线程1. Linux中的线程2. 重新定义线程和进程3. 进程地址空间之页表4. 线程和进程切换5. 线程的优点6. 线程的缺点7. 线程异常8. 线程用途9. 线程和进程 二、线程控制1. pthread 线程库(1)pthread_create()(2)pth…

《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)

文章目录 1.1 MySQL 概览:版本、特性和生态系统1.1.1 基础知识1.1.2 重点案例:使用 Python 实现 MySQL 数据的 CRUD 操作1.1.3 拓展案例 1:使用 Python 实现 MySQL 数据备份**1.1.4 拓展案例 2:使用 Python 分析 MySQL 数据 1.2 安…

例39:使用List控件

建立一个EXE工程,在窗体上放一个文本框,一个列表框和三个按钮输入如下的代码: Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)List1.AddItem(Text1.Text)End SubSub Form1_Command2_BN_Clicked(hWndForm As hWnd, h…

算法学习——LeetCode力扣回溯篇1

算法学习——LeetCode力扣回溯篇1 77. 组合 77. 组合 - 力扣(LeetCode) 描述 任何顺序 返回答案。 示例 示例 1: 输入:n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 输…

steam搬砖项目,“一个月赚8K+”真的假的?

在游戏中,搬砖党是永远都不能忽视的存在,随着游戏产业的不断发展,普通人也可以在steam搬砖项目中找到自己的生财之道。由于是低技术的重复工作,和现实的搬砖类似,所以才叫steam搬砖项目。 steam搬砖项目其实就和pdd无…

数据结构(C语言)代码实现(八)——顺序栈实现数值转换行编辑程序括号分配汉诺塔

目录 参考资料 顺序栈的实现 头文件SqStack.h(顺序栈函数声明) 源文件SqStack.cpp(顺序栈函数实现) 顺序栈的三个应用 数值转换 行编辑程序 顺序栈的实现测试 栈与递归的实现(以汉诺塔为例) 参考资…