当前位置: 首页 > news >正文

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、了解数据库基本概念

  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架构;使用稀疏索引加速查询;每个列都有丰富的压缩算法和索引结构;基于列存设计的高效的数据处理逻辑。

相关文章:

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> <…...

普通单双面板的生产工艺流程之图形转移,华秋一文告诉你

衔接上文&#xff0c;继续为朋友们分享普通单双面板的生产工艺流程。 如图&#xff0c;第五道主流程为图形转移。 图形转移的目的为&#xff1a; 利用光化学原理&#xff0c;将图形线路的形状转移到印制板上&#xff0c;再利用化学原理&#xff0c;将图形线路在印制板上制作出…...

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 设计中的概念和使用方法。首先讨论使用模块&#xff08;module&#xff09;关键字构造 Verilog 设计的方式&#xff0c;以及这与所描述的硬件的关系。这包括对参数、端口&#xff08;port&#xff09;和例化&#xff08;instantiato…...

让乔布斯想要「发动核战争」的 Android,为何成了占有率最高的系统?

2008 年 9 月 23 日&#xff0c;Apple 的创始人和 CEO 史蒂夫乔布斯像往常一样走进了公司&#xff0c;此时距离初代 iPhone 的发布会才过了一年半&#xff0c;这款充满了争议的产品就像一块从山崖滚落的巨岩&#xff0c;一路电光石火的给手机市场的《小石潭记》来了场焚书坑儒。…...

FPGA开发软件(vivado + modelsim)环境搭建(附详细安装步骤+软件下载)

本文详细介绍了vivado软件和modelsim软件的安装&#xff0c;以及vivado中配置modelsim仿真设置&#xff0c;每一步都加文字说明和图片。一、软件安装包下载1、vivado vivado版本很多&#xff0c;目前最新的已更新到vivado2022.2&#xff0c;版本越高&#xff0c;安装包越大&…...

TypeScript 学习之类型

布尔类型 类型: boolean最简单的类型&#xff0c;值只有 true/false let isDone: boolean true;数字类型 类型&#xff1a;number数字都是浮点数&#xff0c;支持二进制、八进制、十进制、十六进制。 let decLiteral: number 16; // 十进制 let hexLiteral: number 0xf0…...

基于MATLAB计算MIMO信道容量(附完整代码与分析)

目录 一.介绍 二. 代码 三. 运行结果及分析 3.1 MIMO信道容量&#xff1a;固定发射天线数为4 3.2 MIMO信道容量&#xff1a;固定接收天线数为4 3.3 AWGN信道与瑞利信道容量 四. 总结 一.介绍 本文章将在MATLAB环境中分析MIMO信道容量&#xff0c;AWGN信道容量&#xf…...

CSDN城市开发者联盟、C友会期待你的加入

文章目录&#x1f31f; 课前小差&#x1f31f; chatGPT&#x1f31f; CSDN中的持续学习&#x1f31f; 23年原力计划&#x1f31f; C友会、CDC&#x1f31f; 如何关联本地的开发者&#xff1f;&#x1f31f; 写在最后&#x1f31f; 课前小差 哈喽&#xff0c;大家好&#xff0c…...

【新2023】华为OD机试 - 吃火锅(Python)

华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 吃火锅 题目 入职后,导师会请你吃饭,你选择了火锅, 火锅里会在不同时间下很多菜, 不同食材要煮不同时间,才能变得刚好合适, 你希望吃到最多的刚好合适的菜, 但是你的手速不够快用m代替手速, 每次…...

类似LeetCode的登录页面(小程序版)

前言每一个项目都会有用户端的注册和登录页面&#xff0c;对于刚入门的小白来说&#xff0c;在UI设计方面不太擅长&#xff0c;就算大致的UI界面设计出来了&#xff0c;但是落实到代码上来实现的时候就很容易卡住。这篇博客主要介绍的就是仿作一个类似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) 例&#xff1a;将数字x进行格式化&#xff0c;以四舍五入的方式保留n位小数&#xff0c;结果以字符串的形式返回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相关概述 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 数据库管理系统&#xf…...

C++ 修改防火墙firewall设置(Windows)

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

从等待到掌控:构建个人化网盘下载工作流的3个关键步骤

从等待到掌控&#xff1a;构建个人化网盘下载工作流的3个关键步骤 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

开发AI智能体时利用Taotoken统一调度多模型提升任务完成率

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 开发AI智能体时利用Taotoken统一调度多模型提升任务完成率 在构建需要处理复杂、多模态任务的AI智能体时&#xff0c;单一模型的能…...

从雨篷结构事故处理谈幕墙钢结构的概念设计

从雨篷结构事故处理谈幕墙钢结构的概念设计 雨篷结构设计是幕墙钢结构设计最重要内容。但由于雨篷静定结构体系的先天不足,外加设计师理论认识水平与设计经验的限制、施工时的不当行为,经常造成工程事故。这些设计缺陷和工程事故的发生,多是由于对雨篷进行概念设计时认知不…...

别再只会点灯了!用51单片机和继电器模块,做个智能插座控制台灯(附完整代码)

从点灯到智能家居&#xff1a;51单片机与继电器模块的实战进阶指南 当你已经能够熟练地用51单片机点亮LED灯时&#xff0c;是否想过将这些基础技能转化为实际生活中的实用工具&#xff1f;本文将带你跨越实验板与真实世界的鸿沟&#xff0c;用最常见的51单片机和继电器模块&…...

从ShareGPT项目拆解现代全栈开发:Next.js、Serverless与Chrome扩展实战

1. 项目概述与核心价值如果你和我一样&#xff0c;经常在ChatGPT里进行一些天马行空的对话&#xff0c;从构思一部科幻小说的世界观&#xff0c;到一步步推导一个复杂的编程问题&#xff0c;再到让它扮演苏格拉底和你辩论哲学&#xff0c;这些对话记录本身就是宝贵的数字资产。…...

ROS2导航SLAM建图实战:从Gazebo仿真到真实地图构建

1. 环境准备与基础配置 第一次接触ROS2导航和SLAM建图的朋友可能会觉得配置环境很复杂&#xff0c;其实只要跟着步骤一步步来&#xff0c;半小时就能搞定。我用的是一台装了Ubuntu 20.04的笔记本&#xff0c;ROS2版本选择Foxy&#xff0c;这个组合最稳定。记得先更新系统&#…...

终极指南:如何免费快速解决Notero Zotero插件安装失败问题

终极指南&#xff1a;如何免费快速解决Notero Zotero插件安装失败问题 【免费下载链接】notero A Zotero plugin for syncing items and notes into Notion 项目地址: https://gitcode.com/gh_mirrors/no/notero 你是否曾经兴奋地下载了Notero这款强大的Zotero-Notion同…...

Taotoken提供的审计日志功能如何满足企业级安全与合规需求

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken提供的审计日志功能如何满足企业级安全与合规需求 1. 企业引入大模型能力后的审计挑战 当企业将大模型API能力整合到内部…...

神经进化算法实战:从零构建AI Flappy Bird游戏智能体

1. 项目概述&#xff1a;当AI学会玩像素小鸟如果你玩过那个让人又爱又恨的《Flappy Bird》&#xff0c;一定对那只在绿色水管间反复横跳的小鸟记忆犹新。但你想过吗&#xff0c;如果让一群“数字小鸟”自己学会玩这个游戏&#xff0c;会是什么景象&#xff1f;这正是“AI Flapp…...

AI教材编写利器!低查重AI写教材工具,快速生成30万字专业教材!

在开始编写教材之前&#xff0c;选择合适的工具真的是一个“非常纠结”的过程&#xff01;如果用常见的办公软件来写&#xff0c;功能太简单&#xff0c;框架设计和格式处理都得自己手动来搞&#xff1b;而要是尝试那些专业的编写工具&#xff0c;又会觉得操作太复杂&#xff0…...