ClickHouse架构概览 —— Clickhouse 架构篇(一)

文章目录

    • 前言
    • Clickhouse 架构简介
    • Clickhouse 的核心抽象
      • 列和字段
      • 数据类型
    • Clickhouse 的运作过程
      • 数据插入过程
      • 数据查询过程
      • 数据更新和删除过程

前言

本文介绍了ClickHouse的整体架构,并对ClickHouse中的一些重要的抽象对象进行了分析。然后此基础上,结合数据库的几个常用的操作,介绍了这些抽象对象的运作机制。

Clickhouse 架构简介

ClickHouse 使用的是MPP(Massively Parallel Processing,大规模并行处理)架构,该架构集群中的任意一台服务器都可以单独对外提供服务,是一个多主的结构。
ClickHouse 的体系结构图如下:
image.png

  • 存储引擎负责将内存中的数据按照特定的规则持久化到磁盘(或HDFS、AWS S3)上,并在需要时将磁盘中的数据加载到内存中。
  • 计算引擎则将用户提交的SQL语句转换成执行计划并对内存中的数据进行计算
  • 服务接口对外提供服务,后台服务负责执行一些分区合并、数据删除等后台工作
  • 管理工具则供系统运维工程师进行数据库的配置、管理

Clickhouse 的最小存储和计算单位为**块,**下图展示了各组件间通过块进行的交互逻辑:
image.png

Clickhouse 的核心抽象

列和字段

  • Clickhouse 中的列是一个数组,可以通过索引获取对应列中的字段,索引下表从 1 开始。
  • 列是不可变的,任何对列的操作都会产生一个全新的对象。
  • 字段表示列数组中某一个独立的值,基于数仓的特性以及性能考虑,字段仅用于极少数情况。通常情况下,ClickHouse会将列当成整体去处理

数据类型

Clickhouse 支持很多种数据类型,多达100多种,数据类型的主要作用如下:

  • 决定了数据在内存中的布局形式
  • 决定了数据可以进行的运算方式
  • 决定了数据持久化到磁盘上时数据文件的序列化和反序列化的方式

丰富的数据类型是 CLickhouse 进行强大的向量化计算的基础。

块是ClickHouse进行数据处理的基本单位。ClickHouse以块为单位对数据进行计算。
块由数据区(Data)的索引区(Index)组成,数据区由列紧密地堆叠而成,索引区存储数据区中列的索引,记录了列名、列的顺序等信息。
下图展示了块的布局示意:
image.png

Clickhouse 可以通过指定不同的表引擎创建不同的表存储结构,最流行的就是MergeTree存储引擎,下图展示了不同表引擎间的对比:
image.png
除了表引擎,Clickhouse 还支持对应的存储引擎来定义数据存储的位置,表引擎决定了数据的逻辑组成,存储引擎决定了文件的保存位置,下图对不同存储引擎特性进行了说明:
image.png

Clickhouse 的运作过程

数据插入过程

image.png

  • 通过服务接口将 SQL 传给计算引擎
  • 计算引擎将SQL 转换为 Pipeline 对象,在QueryPipeline中也保存了计算引擎格式化过的块数据,块对象会随着QueryPipeline一起传递到存储引擎中
  • 存储引擎会将块中的数据保存到对应的数据文件中

数据查询过程

image.png

  • 计算引擎会将SQL 编译转换为 QueryPipeline,该管道中包含一系列转换器,有的转换器可以通过存储引擎获取对应的数据块,然后再通过别的转换器实现过滤、转换、聚合等各种操作,最后通过服务接口将查询结果返回给用户。

数据更新和删除过程

image.png

  • Clickhouse 对数据的更新和删除支持并不是很友好,不建议频繁删除和更新。
  • Clickhouse 对数据的更新和删除,是对表结构的修改,而不是数据的变更。
  • ClickHouse的解析器在收到UPDATE或DELETE语句时,会创建一个异步任务,同时立即返回执行完成。需要注意的是,此时数据并未完成更新或删除,而是会在未来的某个时刻由ClickHouse的后台进程完成数据表的重建。

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

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

相关文章

乘风破浪,创维汽车旗舰店落户安徽

2024年5月19日,创维汽车宣城家奇体验中心盛大开业。宣城市委办公室副主任师典雅、市投资促进局副局长金崇学、经开区管委会副主任汤晓峰、宣城市通信局局长梁登峰、创维汽车战区总经理刘俊、创维汽车大区总监王大明等人出席此次开业盛典,共同见证了创维汽…

内网穿透实现公网访问自己搭建的Ollma架构的AI服务器

内网穿透实现公网访问自己搭建的Ollma架构的AI服务器 [2024年5月9号我发布一个博文关于搭建本地AI服务器的博文][https://blog.csdn.net/weixin_41905135/article/details/138588043?spm1001.2014.3001.5501],今天我们内网穿透实现从公网访问我的本地AI服务器&…

Julia Ide Neptune

一 pkg> add Neptune julia> using Neptune julia> Neptune.run() 二 pkg> add Pluto julia> import Pluto julia> Pluto.run() 主要是装IJulia总报错,索性找了如上替代品。

全国多地入夏!对抗“高温高湿”约克VRF中央空调有妙招

随着气温飙升,北京、上海、广州、南京、天津、江苏、新疆、内蒙古部分地区等多地进入夏季状态,华北、黄淮等不少地方最高气温都超过了30℃,大街上人们短袖、短裤纷纷上阵,一派夏日炎炎的景象。 炎热夏季不仅高温频频来袭,往往还伴随着降雨带来的潮湿,天气湿热交织容易让人们身…

C++第二十弹---深入理解STL中vector的使用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、vector的介绍 2、vector的使用 2.1、构造函数和赋值重载 2.1.1、构造函数的介绍 2.1.2、代码演示 2.2、容量操作 2.3、遍历 2.4、增删…

TO G产品经理常用工具

全国公共资源交易平台 剑鱼标讯官网-招标信息查询_全国招标采购信息订阅推送_专业招标大数据服务平台

【STM32】 独立看门狗配置方法

什么是看门狗 看门狗(watchdog)指的是一种监控系统或程序,用于定期检测和监控其他系统或程序的运行状态,并在出现问题或故障时采取相应的措施。它可以是硬件设备,也可以是软件程序。 在计算机领域中,看门狗…

docker-compose 自动管理 数据库

前言 在现代应用开发中,数据库是核心组件之一。容器化技术可以帮助我们简化部署流程,确保环境一致性,并提高开发和生产的效率。Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Docker Compose,我们可以…

【OceanBase诊断调优】—— 排查 IO 问题的方法

本文主要介绍 OceanBase 数据库 V4.x 版本中排查 IO 问题的方法以及 IO 相关的日志和视图。 IO 相关问题 -4013 内存爆、IoControl 模块内存泄漏 目前 IO 内存爆可能的原因如下,及相应的排查方法。 其他模块使用 IO 内存后未释放导致泄漏。 日志分析。 通过关键词…

【wordpress】网站提示Error establishing a database connection错误代码

Error establishing a database connection错误代码处理方法: 检查数据库连接情况检查数据库账号密码是否正确检查数据库是否开启 总之较大可能是数据库出现了问题

移动云:连接未来的智慧之旅

随着数字化转型的加速,云服务在各行各业中的应用越来越广泛。移动云不仅提供了灵活的计算和存储资源,还通过创新的技术手段,为企业和开发者解决了许多实际问题。在这个变革的大背景下,移动云服务作为中国移动倾力打造的云业务品牌…

​​​【收录 Hello 算法】10.4 哈希优化策略

目录 10.4 哈希优化策略 10.4.1 线性查找:以时间换空间 10.4.2 哈希查找:以空间换时间 10.4 哈希优化策略 在算法题中,我们常通过将线性查找替换为哈希查找来降低算法的时间复杂度。我们借助一个算法题来加深理解。 Question 给…

vscode 插件-01基础

翻译 Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 适用于 VS Code 的中文(简体)语言包 远程连接 Remote Development Remote Development是vscode的远程编程与调试的插件,使用这个插件可以在很多情况下代替vim…

centos中安装docker(粘贴执行)

如标题所示,以下命令直接粘贴执行就可以。 sudo yum update -ysudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum install -y docker-ce do…

Linux VIM指令

三种模式 命令模式:控制屏幕光标的移动,字符、字或行的删除等输入对文件的一些指令 插入模式:对文件内容进行文字输入 底行摸索:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作…

icloud 如何高效利用

iCloud 是苹果公司提供的一项云存储服务,旨在帮助用户在各个苹果设备之间同步和备份数据。高效利用 iCloud 可以显著提升你的工作效率和数据管理能力。以下是一些高效利用 iCloud 的方法和技巧。 ### 1. 启用 iCloud 同步 #### iPhone/iPad 上的设置 1. 打开“设置…

Python语言例题集(014)

#!/usr/bin/python3 #建立双向链表。 class Node(): def init(self,dataNone): self.datadata self.nextNone self.previousNone class DoubleLinkedList(): def init(self): self.headNone self.tailNone def addDoubleList(self,newNode):if isinstance(newNode,Node):if…

error LNK2038: 检测到“boost_log_abi”的不匹配项

最近项目上遇到了这个问题,看提示和查阅资料知道是boost版本不匹配的问题,但是项目原因换boost版本不太现实,一时竟然不知道怎么解决。 后来在同事的提示下,对于boost_log相关的代码,引用其头文件时,放到最…

云计算-关系型数据库(Relational Database)

关系数据库服务(RDS)(Relational Database Service (RDS)) Amazon RDS 可用于在云中设置和运行关系数据库。它支持多种数据库实例类型以及多个数据库引擎,如 Amazon Aurora、PostgreSQL、MySQL、MariaDB、Oracle 数据库…

若依实现路由跳转功能 动态路由获取参数

若依实现路由跳转功能 动态路由 若依前端中的动态路由参考代码 动态路由设置:router文件 {path: /system/dict-data,component: Layout,hidden: true,permissions: [system:dict:list],children: [{path: index/:dictId(\\d),component: () > import(/views/sy…