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&…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
