ClickHouse列存储(十一)—— ClickHouse
文章目录
- 一、重点内容:
- 1.数据库基本概念
- 2.列式存储
- 3.clickHouse存储设计
- 4.clickHouse典型应用场景
- 二、准备工作:
- 1、了解数据库基本概念
- 2、了解列式存储相关概念
- 3、了解ClickHouse存储设计
- 4、了解 ClickHouse典型应用场景
- 三、详细知识点介绍:
- 1、数据库相关概念
- 定义:
- 数据库的类型:
- 方式一:
- 方式二:
- 方式三:
- OLAP数据库:
- 特性:
- 数据库架构:
- SQL的执行:
- 存储引擎作用:
- 1.管理内存数据结构
- 2.管理磁盘数据
- 3.读写算子
- 2、列式存储
- 行式存储:
- 列式存储:
- 列式存储的优点:
- 数据压缩:
- 常见压缩算法:
- 数据选择:
- 延迟物化:
- 3、ClickHouse存储设计
- 表定义和结构:
- 集群架构:
- 引擎架构:
- 存储架构:
- 索引设计:
- 1、Hash lndex
- 2、B-Tree
- 3、B+Tree
- 4、LSM-tree
- 4、ClickHouse应用场景
- 1、大宽表存储和查询:
- 1.大宽表查询
- 2、动态表结构
- 2、离线数据分析
- 1.数据导入
- 2.数据按列导入
- 3、实时数据分析
- 4、使用memory table减少parts数量
- 5、复杂类型查询:
- 1、bitmap索引(构建)
- 2、bitmap索引(查询)
- 四、个人总结:
一、重点内容:
1.数据库基本概念
2.列式存储
3.clickHouse存储设计
4.clickHouse典型应用场景
二、准备工作:
1、了解数据库基本概念
- 数据库
- DBMS:数据库管理系统
- OLTP 数据库 : OLTP(Online transactional processing)
- OLAP 数据库:OLAP (Online analytical processing)
- SQL (Structured Query Language)
- 词法分析
- 语法分析
- AST (Abstract syntax tree)
2、了解列式存储相关概念
-
行式存储
-
列式存储
-
数据压缩
a. LZ4
b. Run-length encoding
c. Delta encoding
-
延迟物化
a. 物化
b. Cpu cache
c. 内存带宽
-
向量化
a. SIMD (single instruction multiple data)
b. SSE指令集
c. AVX指令集
3、了解ClickHouse存储设计
-
Shard key
-
索引
a. 哈希索引
b. B-Tree
c. B+Tree
d. LSM-Tree
4、了解 ClickHouse典型应用场景
- Kafka
- Spark
- Hdfs
- Bitmap
- 字典编码
三、详细知识点介绍:
1、数据库相关概念
定义:
数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。
数据库的类型:
方式一:
关系数据库:
关系型数据库是把数据以表的形式进行储存,然后再各个表之间建立关系,通过这些表之间的关系来操作不同表之间的数据。
非关系数据库:
NoSQL或非关系数据库,支持存储和操作非结构化及半结构化数据。相比于关系型数据库,NoSQL没有固定的表结构,且数据之间不存在表与表之间的关系,数据之间可以是独立的。
方式二:
单机数据库:
在一台计算机上完成数据的存储和查询的数据库系统。
分布式数据库:
分布式数据库由位于不同站点的两个或多个文件组成。数据库可以存储在多台计算机上,位于同一个物理位置,或分散在不同的网络上。
方式三:
OLTP数据库:
OLTP ( Online transactional processing)数据库是―种高速分析数据库,专为多个用户执行大量事务而设计。
OLAP数据库:
OLAP (Online analytical processing) 数据库旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系
OLAP数据库:
特性:
1、大量数据的读写,PB级别的存储。
2、多维分析,复杂的聚合函数。

3、窗口函数,自定义UDF(User DefineFucntion)
4、离线/实时分析
数据库架构:
SQL的执行:
步骤:
1、Parser:词法分析,语法分析,生成AST树(Abstract syntax tree)

2、Analyzer:变量绑定、类型推导、语义检查、安全、权限检查、完整性检查等,为生成计划做准备
例如︰
判断a, b是不是类型正确。
a, b是不是来自表t。
group by字段是否合法,是否存在聚合函数。
3、Optimizer: 为查询生成性能最优的执行计划,进行代价评估

4、Executor: 将执行计划翻译成可执行的物理计划并驱动其执行

存储引擎作用:
1.管理内存数据结构
索引
内存数据
缓存:
Query cache
Data cache
lndex cache
2.管理磁盘数据
磁盘数据的文件格式磁盘数据的增删查改
3.读写算子
数据写入逻辑数据读取逻辑
2、列式存储
行式存储:

列式存储:

列式存储的优点:
数据压缩:
1、数据压缩可以使读的数据量更少.在IO密集型计算中获得更大的性能优势
2、相同类型压缩效率更高
3、排序之后压缩效率更高
4、可以针对不同类型使用不同的压缩算法
常见压缩算法:
1、LZ4:
(5,4)代表向前5个byte,匹配到的内容长度有4,即"bcde"是一个重复。
重复项越多或者越长,压缩率就会越高。

2、Run-length encoding:
压缩重复的数据
可以再压缩数据上直接计算

3、Delta encoding :
将数据存储为连续数据之间的差异,而不是直接存储数据本身
特定算子也能直接在压缩数据上计算

数据选择:
可以选择特定的列做计算而不是读所有列
对聚合计算友好
如图:
延迟物化:
物化:将列数据转换为可以被计算或者输出的行数据或者内存数据结果的过程,物化后的数据通常可以用来做数据过滤,聚合计算, Join。

延迟物化:尽可能推迟物化操作的发生
3、ClickHouse存储设计
表定义和结构:

集群架构:

引擎架构:

存储架构:

索引设计:
1、Hash lndex
1.将输入的key通过一个HashFunction映射到一组bucket上
2.每个bucket都包含一个指向一条记录的地址
3.哈希索引在查找的时候只适用于等值比较

2、B-Tree
1.数据写入是有序的,支持增删查改
2.每个节点有多个孩子节点
3.每个节点都按照升序排列key值
4.每个key有两个指向左右孩子节点的引用
-左孩子节点保存的key都小于当前key
-右孩子节点的保存的key都大于当前key
3、B+Tree
1.所有的数据都存储在叶子节点,非叶子节点只保存key值
2.叶子节点维护到相邻叶子节点的引用
3.可以通过key值做二分查找,也可以通过叶子节点做顺序访问
4、LSM-tree
Log-structured merge-tree (LSM tree)是一种为大吞吐写入场景而设计的数据结构
-着重优化顺序写入
-主要数据结构
1、SSTables
- Key按顺序存储到文件中,称为segment
- 包含多个segment
- 每个segment写入磁盘后都是不可更改的,新加的数据只能生成新的segment

2、Memtable
-在内存中的数据保存在memtable中,大多数实现都是―颗Binary search tree
-当memtable存储的数据到达一定的阈值的时候,就会按顺序写入到磁盘
LSM-tree的数据查询:
需要从最新的segment开始遍历每个key
也可以为每个segment建一个索引,例如下图:

4、ClickHouse应用场景
1、大宽表存储和查询:
1.大宽表查询
-可以建非常多的列
-可以增加,删除,清空每—列的数据
-查询的时候引擎可以快速选择需要的列
-可以将列涉及到的过滤条件下推到存储层从而加速查询
2、动态表结构
- map中的每个key都是一列
- map中的每一列都可以单独的查询
- 使用方式同普通列,可以做任何计算
2、离线数据分析
1.数据导入
-数据可以通过spark生成clickhouse格式的文件
-导入到hdfs上由hive2ch导入工具完成数据导入
-数据直接导入到各个物理节点

2.数据按列导入
保证查询可以及时访问已有数据
可以按需加载需要的列

3、实时数据分析

4、使用memory table减少parts数量
1.数据先缓存在内存中
2.到达—定阈值再写到磁盘

5、复杂类型查询:
1、bitmap索引(构建)

2、bitmap索引(查询)

四、个人总结:
此次学习只要是借ClickHouse存储结构引出整个数据库的概念、原理、设计。终得到以下总结:ClickHouse是标准的列存结构;存储设计是LSM-Tree架构;使用稀疏索引加速查询;每个列都有丰富的压缩算法和索引结构;基于列存设计的高效的数据处理逻辑。
相关文章:

ClickHouse列存储(十一)—— ClickHouse
文章目录一、重点内容:1.数据库基本概念2.列式存储3.clickHouse存储设计4.clickHouse典型应用场景二、准备工作:1、了解数据库基本概念2、了解列式存储相关概念3、了解ClickHouse存储设计4、了解 ClickHouse典型应用场景三、详细知识点介绍:1…...

公司来了个卷王,真让人奔溃
2022年已经结束结束了,最近内卷严重,各种跳槽裁员,相信很多小伙伴也在准备今年的金三银四的面试计划。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必要的,它几乎涵盖了所有的…...

什么是refresh?Spring refresh 流程
refresh 是 AbstractApplicationContext 中的一个方法,负责初始化 ApplicationContext 容器,容器必须调用 refresh 才能正常工作。它的内部主要会调用 12 个方法,我们把它们称为 refresh 的 12 个步骤:1. prepareRefresh2. obtain…...

Python登陆系统
前言 #源码见文末公众号哈# 登录系统 一个简单的登录系统包含了登录账户、注册账户、修改密码以及注销账户的操作。 1. 登录账户 登录系统主要需要判断账户是否存在,不存在就注册一个账户,如果第一次登录系统,我们需要先新建一个文件&…...
【新2023】华为OD机试 - 重组字符串(Python)
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 重组字符串 题目 给定一个非空字符串 S,其被 N 个‘-’分隔成 N+1 的子串,给定正整数 K, 要求除第一个子串外,其余的子串每 K 个字符组成新的子串,并用‘-’分隔。 对于新组成的每一个子串,如果它…...
视频监控流程图
<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"/> <link rel"stylesheet" type"text/css" href"visio.css"/> <title> 视频监控流程图 </title> <…...

普通单双面板的生产工艺流程之图形转移,华秋一文告诉你
衔接上文,继续为朋友们分享普通单双面板的生产工艺流程。 如图,第五道主流程为图形转移。 图形转移的目的为: 利用光化学原理,将图形线路的形状转移到印制板上,再利用化学原理,将图形线路在印制板上制作出…...
1.8 providers
生成providersnest g service <name>providers的注入方式构造函数注入Injectable() export class KeywordService {constructor(private readonly httpService: HttpService,private readonly pro: ProService,) {} }Inject()注入export class KeywordController {Inject…...

如何编写一个基本的 Verilog Module(模块)
1、概述这篇文章主要介绍了 Verilog 在 FPGA 设计中的概念和使用方法。首先讨论使用模块(module)关键字构造 Verilog 设计的方式,以及这与所描述的硬件的关系。这包括对参数、端口(port)和例化(instantiato…...

让乔布斯想要「发动核战争」的 Android,为何成了占有率最高的系统?
2008 年 9 月 23 日,Apple 的创始人和 CEO 史蒂夫乔布斯像往常一样走进了公司,此时距离初代 iPhone 的发布会才过了一年半,这款充满了争议的产品就像一块从山崖滚落的巨岩,一路电光石火的给手机市场的《小石潭记》来了场焚书坑儒。…...

FPGA开发软件(vivado + modelsim)环境搭建(附详细安装步骤+软件下载)
本文详细介绍了vivado软件和modelsim软件的安装,以及vivado中配置modelsim仿真设置,每一步都加文字说明和图片。一、软件安装包下载1、vivado vivado版本很多,目前最新的已更新到vivado2022.2,版本越高,安装包越大&…...
TypeScript 学习之类型
布尔类型 类型: boolean最简单的类型,值只有 true/false let isDone: boolean true;数字类型 类型:number数字都是浮点数,支持二进制、八进制、十进制、十六进制。 let decLiteral: number 16; // 十进制 let hexLiteral: number 0xf0…...

基于MATLAB计算MIMO信道容量(附完整代码与分析)
目录 一.介绍 二. 代码 三. 运行结果及分析 3.1 MIMO信道容量:固定发射天线数为4 3.2 MIMO信道容量:固定接收天线数为4 3.3 AWGN信道与瑞利信道容量 四. 总结 一.介绍 本文章将在MATLAB环境中分析MIMO信道容量,AWGN信道容量…...

CSDN城市开发者联盟、C友会期待你的加入
文章目录🌟 课前小差🌟 chatGPT🌟 CSDN中的持续学习🌟 23年原力计划🌟 C友会、CDC🌟 如何关联本地的开发者?🌟 写在最后🌟 课前小差 哈喽,大家好,…...
【新2023】华为OD机试 - 吃火锅(Python)
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 吃火锅 题目 入职后,导师会请你吃饭,你选择了火锅, 火锅里会在不同时间下很多菜, 不同食材要煮不同时间,才能变得刚好合适, 你希望吃到最多的刚好合适的菜, 但是你的手速不够快用m代替手速, 每次…...

类似LeetCode的登录页面(小程序版)
前言每一个项目都会有用户端的注册和登录页面,对于刚入门的小白来说,在UI设计方面不太擅长,就算大致的UI界面设计出来了,但是落实到代码上来实现的时候就很容易卡住。这篇博客主要介绍的就是仿作一个类似LeetCode登录的简约大方页…...

CUDA的统一内存
CUDA的统一内存 文章目录CUDA的统一内存N.1. Unified Memory IntroductionN.1.1. System RequirementsN.1.2. Simplifying GPU ProgrammingN.1.3. Data Migration and CoherencyN.1.4. GPU Memory OversubscriptionN.1.5. Multi-GPUN.1.6. System AllocatorN.1.7. Hardware Coh…...
MySQL-其他函数(补充)
格式化函数FORMAT(x, n) 例:将数字x进行格式化,以四舍五入的方式保留n位小数,结果以字符串的形式返回mysql> select format(12.3456,3),format(2.2,4),format(9.333,0); --------------------------------------------------- | format(12…...

MySQL Study Notes Design in 2023
文章目录1 概述1.1 MySQL相关概述1.2 数据模型1.3 SQL分类2 数据库设计-DDL2.1 约束2.2 字段3 数据库操作-DML3.1 增加(insert)1 概述 1.1 MySQL相关概述 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 数据库管理系统…...

C++ 修改防火墙firewall设置(Windows)
文章目录1、简介1.1 防火墙概述1.2 入站,还是出站?1.3 防火墙规则优先级2、系统界面方式3、命令行方式3.1 防火墙基本状态设置3.2 入站出站规则设置3.3 其他设置3.4 telnet检测端口4、C方式4.1 注册表4.2 COM(Windows XP)4.3 COM&…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...