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&…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
