ClickHouse列存储(十一)—— ClickHouse

news2024/11/16 21:37:30

文章目录

    • 一、重点内容:
      • 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、了解数据库基本概念

  1. 数据库
  2. DBMS:数据库管理系统
  3. OLTP 数据库 OLTP(Online transactional processing)
  4. OLAP 数据库:OLAP (Online analytical processing)
  5. SQL (Structured Query Language)
  6. 词法分析
  7. 语法分析
  8. AST (Abstract syntax tree)

2、了解列式存储相关概念

  1. 行式存储

  2. 列式存储

  3. 数据压缩

    a. LZ4

    b. Run-length encoding

    c. Delta encoding

  4. 延迟物化

    a. 物化

    b. Cpu cache

    c. 内存带宽

  5. 向量化

    a. SIMD (single instruction multiple data)

    b. SSE指令集

    c. AVX指令集

3、了解ClickHouse存储设计

  1. Shard key

  2. 索引

    a. 哈希索引

    b. B-Tree

    c. B+Tree

    d. LSM-Tree

4、了解 ClickHouse典型应用场景

  1. Kafka
  2. Spark
  3. Hdfs
  4. Bitmap
  5. 字典编码

三、详细知识点介绍:

1、数据库相关概念

定义:

数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。

数据库的类型:

方式一:

关系数据库:

关系型数据库是把数据以表的形式进行储存,然后再各个表之间建立关系,通过这些表之间的关系来操作不同表之间的数据。

非关系数据库:

NoSQL或非关系数据库,支持存储和操作非结构化及半结构化数据。相比于关系型数据库,NoSQL没有固定的表结构,且数据之间不存在表与表之间的关系,数据之间可以是独立的。

方式二:

单机数据库:

在一台计算机上完成数据的存储和查询的数据库系统。

分布式数据库:

分布式数据库由位于不同站点的两个或多个文件组成。数据库可以存储在多台计算机上,位于同一个物理位置,或分散在不同的网络上。

方式三:

OLTP数据库:

OLTP ( Online transactional processing)数据库是―种高速分析数据库,专为多个用户执行大量事务而设计。

OLAP数据库:

OLAP (Online analytical processing) 数据库旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系

OLAP数据库:

特性:

1、大量数据的读写,PB级别的存储。

2、多维分析,复杂的聚合函数。

image-20230216184051436

3、窗口函数,自定义UDF(User DefineFucntion)

4、离线/实时分析

数据库架构:

image-20230216184748657

SQL的执行:

步骤:

1、Parser:词法分析,语法分析,生成AST树(Abstract syntax tree)

image-20230216185324168

2、Analyzer:变量绑定、类型推导、语义检查、安全、权限检查、完整性检查等,为生成计划做准备
例如︰

判断a, b是不是类型正确。

a, b是不是来自表t。

group by字段是否合法,是否存在聚合函数。

3、Optimizer: 为查询生成性能最优的执行计划,进行代价评估

image-20230216190449023

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

image-20230216191241437

存储引擎作用:

1.管理内存数据结构

索引

内存数据

缓存:

Query cache

Data cache

lndex cache

2.管理磁盘数据

磁盘数据的文件格式磁盘数据的增删查改

3.读写算子

数据写入逻辑数据读取逻辑

2、列式存储

行式存储:

image-20230216192550334

列式存储:

image-20230216192627874

列式存储的优点:

image-20230216210155850

数据压缩:

1、数据压缩可以使读的数据量更少.在IO密集型计算中获得更大的性能优势

2、相同类型压缩效率更高

3、排序之后压缩效率更高

4、可以针对不同类型使用不同的压缩算法

常见压缩算法:

1、LZ4:

(5,4)代表向前5个byte,匹配到的内容长度有4,即"bcde"是一个重复。

重复项越多或者越长,压缩率就会越高。

image-20230216193251366

2、Run-length encoding:

压缩重复的数据

可以再压缩数据上直接计算

image-20230216193709767

3、Delta encoding :

将数据存储为连续数据之间的差异,而不是直接存储数据本身

特定算子也能直接在压缩数据上计算

image-20230216193822030
数据选择:

可以选择特定的列做计算而不是读所有列

对聚合计算友好

如图:image-20230216205450155

延迟物化:

物化:将列数据转换为可以被计算或者输出的行数据或者内存数据结果的过程,物化后的数据通常可以用来做数据过滤,聚合计算, Join。

image-20230216205700192

延迟物化:尽可能推迟物化操作的发生

3、ClickHouse存储设计

表定义和结构:

image-20230216210427878

集群架构:

image-20230216210913437

引擎架构:

image-20230216211337749

存储架构:

image-20230216211452714

索引设计:

1、Hash lndex

1.将输入的key通过一个HashFunction映射到一组bucket上

2.每个bucket都包含一个指向一条记录的地址

3.哈希索引在查找的时候只适用于等值比较

image-20230216213242976
2、B-Tree

1.数据写入是有序的,支持增删查改

2.每个节点有多个孩子节点

3.每个节点都按照升序排列key值

4.每个key有两个指向左右孩子节点的引用

-左孩子节点保存的key都小于当前key

-右孩子节点的保存的key都大于当前key

image-20230216213423712

3、B+Tree

1.所有的数据都存储在叶子节点,非叶子节点只保存key值

2.叶子节点维护到相邻叶子节点的引用

3.可以通过key值做二分查找,也可以通过叶子节点做顺序访问

image-20230216213724748

4、LSM-tree

Log-structured merge-tree (LSM tree)是一种为大吞吐写入场景而设计的数据结构

-着重优化顺序写入

-主要数据结构

1、SSTables

  1. Key按顺序存储到文件中,称为segment
  2. 包含多个segment
  3. 每个segment写入磁盘后都是不可更改的,新加的数据只能生成新的segment
image-20230216214523924

2、Memtable

-在内存中的数据保存在memtable中,大多数实现都是―颗Binary search tree

-当memtable存储的数据到达一定的阈值的时候,就会按顺序写入到磁盘

LSM-tree的数据查询:
需要从最新的segment开始遍历每个key

也可以为每个segment建一个索引,例如下图:

image-20230216214949744

4、ClickHouse应用场景

1、大宽表存储和查询:

1.大宽表查询

-可以建非常多的列

-可以增加,删除,清空每—列的数据

-查询的时候引擎可以快速选择需要的列

-可以将列涉及到的过滤条件下推到存储层从而加速查询

image-20230216215431125

2、动态表结构
  • map中的每个key都是一列
  • map中的每一列都可以单独的查询
  • 使用方式同普通列,可以做任何计算

image-20230216215559294

2、离线数据分析

1.数据导入

-数据可以通过spark生成clickhouse格式的文件

-导入到hdfs上由hive2ch导入工具完成数据导入

-数据直接导入到各个物理节点

image-20230216215728021
2.数据按列导入

保证查询可以及时访问已有数据

可以按需加载需要的列

image-20230216215824914

3、实时数据分析

image-20230216215929460

4、使用memory table减少parts数量

1.数据先缓存在内存中

2.到达—定阈值再写到磁盘

image-20230216220018997

5、复杂类型查询:

1、bitmap索引(构建)
image-20230216220110222
2、bitmap索引(查询)
image-20230216220204400

四、个人总结:

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

转换矩阵、平移矩阵、旋转矩阵关系以及python实现旋转矩阵、四元数、欧拉角之间转换

文章目录1. 转换矩阵、平移矩阵、旋转矩阵之间的关系2. 缩放变换、平移变换和旋转变换2. python实现旋转矩阵、四元数、欧拉角互相转化由于在平时总是或多或少的遇到平移旋转的问题,每次都是现查资料,然后查了忘,忘了继续查,这次弄…

浅析高频电路设计中铜箔对于电气性能的影响

引言 随着未来可使用频率的升高,对于高频PCB设计的理念也在发生改变,例如高频PCB越来越多的由单、双面板向多层板结构转移,复杂的金属化过孔结构(任意层间互联)正在取代简单的金属化过孔或者非金属化过孔结构。 本文…

蓝桥杯刷题——基础篇(二)

这部分题目,主要面向有志参加ACM与蓝桥杯竞赛的同学而准备的,蓝桥杯与ACM考察内容甚至评测标准基本都一样,因此本训练计划提供完整的刷题顺序,循序渐进,提高代码量,巩固基础。因竞赛支持C语言、C、Java甚至…

快速实现Modbus TCP转BACnet IP协议的方案

一、需求背景 BACnet是用于智能楼宇自控系统的主流通信协议,可用在暖通空调系统(HVAC,包括暖气、通风、空气调节),也可以用在照明控制、门禁系统、火警侦测系统及其相关的设备。楼宇中的受控设备都通过BACnet协议连接到…

使用 GeForce Experience 更新 NVIDIA GPU 显卡驱动

使用 GeForce Experience 更新 NVIDIA GPU 显卡驱动1. NVIDIA GeForce Experience 2. 驱动程序 -> 检查更新文件 3. 下载 如果有可用的新版驱动的话,点击后方的 [下载] 按钮即可。 4. 安装 [快速安装] 按照默认设置安装驱动,[自定义安装] 可以自行…

C语言实例|在控制台打印余弦曲线

需求 在控制台打印余弦曲线。 余弦曲线又叫余弦波(cosinwave),是一种来自数学三角函数中的余弦比例的曲线。也是模拟信号的代表,与代表数字信号的方波相对。 标准的纯余弦函数公式为: 实例代码 /*** author: 冲哥 …

炔活化的生物素化试剂773888-45-2,Alkyne-Biotin,炔基生物素

【产品描述】炔活化的生物素化试剂,可通过铜催化的点击反应与叠氮化物反应,产生稳定的三唑键,生物素炔烃在结构上与生物素炔烃相同。用于通过点击化学制备各种生物素化共轭物的生物素炔烃。Alkyne activated biotinylation reagents can prod…

Linux逻辑卷管理器(PV、VG、LV、PE)

目录 PV阶段 VG阶段 LV阶段 文件系统阶段 逆向操作(删除LVM) 逻辑卷管理器(Logical Volume Manager),简称LVM LVM的做法是将几个物理的分区(或磁盘)通过软件组合成为一块看起来时独立的大…

回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测

回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测 目录回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 Matlab实现NGO-BiLSTM北方苍鹰算法…

Mybatis源码(3) - Executor执行过程 | 一级缓存 | 二级缓存

0. 前言:1. CachingExecutor#query:1.1. BoundSql:1.2. CacheKey:1.3. 二级缓存:1.4. 一级缓存:2. JDBC过程执行:3. 结果集处理:4. Mybatis的一级缓存、二级缓存区别:0. …

PHP(14)会话技术

PHP(14)会话技术一、概念二、分类三、cookie技术1. cookie的基本使用2. cookie的生命周期3. cookie的作用范围4. cookie的跨子域5. cookie的数组数据四、session1. session原理2. session基本使用3. session配置4. 销毁session一、概念 HTTP协议是一种无…

注解(加与不加的区别)

起因: 在看到这个文章时,对于注解的作用半知半解,由此,写了个例子,验证注解作用 以Override举例 新建一个父类,取名为textone(类名首字母应该大写) 写一个方法: 再新建一个类,继承…

Java学的好,工作不愁找

俗话说的好:“Java学的好,工作不愁找”,不管我们学习哪一门语言,我们都要掌握从抽象化中提取出来的方法,这样你才能提高我们的学习能力,并且在学习新事物的时候可以提取我们自己的想法。学习java&#xff0…

使用营销自动化的 7 大主要优势

对于大多数企业家来说,自动化已成为在数字时代简化业务的必要条件。那么,您可以采取哪些步骤来实施营销自动化呢? 1. 社交媒体整合 拥有吸引人的社交媒体形象是成功的先决条件。您不可能完成所有社交媒体营销任务,使用自动化软件&…

git idea创建新分支,获取/合并主支代码的2个方法

其他sql格式也在更新中,可直接查看这个系列,要是没有你需要的格式,可在评论或私信我 个人目录 获取主支代码的2个方法1,创建一个分支,获取主支的所有代码(场景:我需要一个自己的分支进行编写模…

【MyBatis】源码学习 02 - Java 元注解以及 MyBatis @Param 注解分析

文章目录前言参考目录学习笔记1、Java 注解1.1、Java 元注解1.2、Java ElementType 枚举值1.3、自定义注解2、Param 注解分析2.1、Param 注解2.2、测试方法2.3、流程分析(重点:ParamNameResolver)前言 本文内容对应的是书本第 7 章的内容&am…

Java文件操作和I/O

Java 流(Stream)、文件(File)和IOJava.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。一个流可以理解为一个数据的序列。输入流表示从一个源…

Python 自己简单地造一个轮子.whl文件

造轮子引言准备文件原始文件打包轮子文件运行验证引言 平时使用的python第三方库很顺手,这第三方库一般都是大家一起努力的结果,那我们是不是也可以贡献一点力量呢?首先从造一个本地的.whl文件开始。 在python中,引用第三方库时…

AI算法创新赛-人车目标检测竞赛总结02

源码目录--AI0000026/ --models/ #存放原始模型文件 --scripts/ #存放模型编译、量化所用到的命令脚本,标签格式转换的脚本。 --data/ #存放B榜数据集102张图片 --bmodel/ #存放编译或量化生成的xxx.bmodel --test/ #存放执行推理的代码,会调用bmodel/中…

CAD二次开发 添加按钮Ribbon

这篇文章是教大家怎样子创建自己的Ribbon按钮界面(如下图),以下示例代码在CAD2020中运行实现。 背景 创建一个属于自己的Ribbon按钮(如下图) 理解Ribbon、Panel、Tab的关系(如下图)&#xff…