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

中间件--ClickHouse-5--架构设计(分布式架构,列式压缩存储、并行计算)

1、整体架构设计

ClickHouse 采用MPP(大规模并行处理)架构,支持分布式计算和存储,其核心设计目标是高性能列式分析。

(1)、存储层

  • 列式存储:
    数据按列存储(而非传统行式存储),每个列独立存储为文件,仅读取必要列,减少 I/O。
    优势:

    • 列式压缩率高(如数值列使用 Delta 编码,字符串使用 LZ4 或字典编码)。
    • 数据局部性好,适合向量化计算。
  • 数据分块(Blocks):
    数据被划分为 固定大小的块(默认 如8192行),每个块独立压缩存储,支持快速读取和并行处理。

  • MergeTree 家族引擎:
    核心存储引擎,基于 LSM-Tree 概念,数据按 ORDER BY 排序,通过后台合并(Merge)优化查询。
    常见引擎:

    • MergeTree:基础引擎,无复制。
    • ReplicatedMergeTree:支持副本,依赖 ZooKeeper 实现高可用。
    • SummingMergeTree:自动合并相同分组的聚合结果(如 SUM)。

(2)、查询处理层

  • 向量化执行引擎:

    • 批量处理:一次可处理 1024 行(或更多)数据,而非逐行执行。
    • SIMD 指令:利用 CPU 的 AVX2/AVX512 指令集加速计算(如 COUNT、SUM)。
    • 零拷贝:数据直接从磁盘映射到内存,减少内存拷贝开销。
  • 查询执行流程:

    1. 解析与优化:将 SQL 转换为 AST(抽象语法树),优化查询计划(如下推过滤条件)。
    2. 执行管道:构建执行管道,按列读取数据,通过向量化函数处理。
    3. 聚合与合并:对结果进行聚合(如 GROUP BY),并合并分块数据。
  • 索引与过滤:

    • 主键索引:数据按 ORDER BY 排序,支持快速范围查询。
    • 稀疏索引:每个数据块存储列的 min/max 值,跳过无关块。

(3)、分布式架构

  • 分片(Sharding):
    数据按分片键(如 PARTITION BY 或哈希)水平拆分到多个节点,实现负载均衡。

  • 副本(Replication):
    每个分片可配置多个副本(如 ReplicatedMergeTree),通过 ZooKeeper 协调同步,确保高可用。

  • 分布式表(Distributed Table):
    逻辑表,代理访问多个分片,支持跨节点查询:

  CREATE TABLE distributed_table ENGINE = Distributed('cluster', 'local_database', 'local_table');
  • 查询时自动分发到各分片并行执行,结果合并后返回。

  • ZooKeeper 集成:
    用于协调分布式集群的元数据(如副本状态、分片分配)和故障转移。

2、核心组件与流程

(1)、数据写入流程

  1. 插入数据:通过 INSERT INTO 写入本地表,数据暂存为 临时文件。
  2. 合并(Merge):后台进程定期合并小文件为大块,按 ORDER BY 排序,优化查询性能。
  3. 副本同步:ReplicatedMergeTree 通过 ZooKeeper 同步数据到其他副本。

(2)、查询执行流程

  1. 解析与优化:
    • SQL 被解析为 AST,优化器选择最优执行计划(如过滤下推、并行策略)。
  2. 分布式查询:
    • 若查询分布式表,ClickHouse 将任务分发到所有分片并行执行。
  3. 向量化计算:
    • 按列读取数据块,利用 SIMD 指令批量处理(如过滤、聚合)。
  4. 结果合并:
    • 分片结果返回后,ClickHouse 合并最终结果(如 GROUP BY 的最终聚合)。

(3)、数据压缩与存储

  • 压缩算法:

    • LZ4:压缩速度快,适合实时场景。
    • ZSTD:压缩率更高,适合存储优化。
    • 自适应压缩:根据列类型选择最优算法(如数值列用 Delta + LZ4)。
  • 存储结构:

    • 数据按 数据块(Block) 存储,每个块包含多个列的压缩数据。
    • 索引信息(如 min/max)存储在块的元数据中。

3、关键特性与优势

(1)、列式存储的优势

  • 高效查询:仅读取所需列,减少 I/O。
  • 高压缩率:同类数据压缩效率比行式存储高 5-10倍。
  • 向量化计算:CPU 利用率高,适合现代硬件的 SIMD 指令。

(2)、分布式与高可用

  • 多主架构:集群节点对等,无单点故障,支持跨数据中心部署。
  • 故障自动恢复:通过 ZooKeeper 监控节点状态,故障时自动切换副本。

(3)、向量化执行引擎

  • 零拷贝技术:数据直接从磁盘映射到内存,避免 CPU 内存拷贝。
  • 批量处理:一次处理 1024 行数据,减少分支预测开销。

4、架构示意图

在这里插入图片描述

5、典型应用场景

(1)、实时分析:如日志分析、用户行为统计。
(2)、OLAP 查询:快速聚合 PB 级数据(如 SUM、COUNT、DISTINCT)。
(3)、时序数据:物联网设备数据的高效存储与查询。

6、总结

ClickHouse的列式存储、向量化执行引擎和分布式架构 是其高性能的核心。通过 数据分块压缩、MPP 并行计算 和 ZooKeeper 协调,它在海量数据分析场景中实现了 秒级响应 和 线性扩展能力。其架构设计特别适合读多写少的场景,但需注意避免频繁更新/删除操作(因其追加写入模式)。

逆风翻盘,Dare To Be!!!

相关文章:

  • FP3:机器人操作的3D基础策略
  • 常见的 API 设计风格
  • 列表、字符串、heapq堆对列算法
  • windows10 wsl2 安装ubuntu和docker
  • 中间件--ClickHouse-6--SQL基础(类似Mysql,存在差异)
  • 【Linux】系统入门
  • cursor AI编辑器的详细使用
  • 深度解析 Vue 项目 Webpack 分包与合包 一文读懂
  • Hadoop数据压缩教程
  • 深入理解栈数据结构:从基础概念到高级应用
  • Dify简介:从架构到部署与应用解析
  • go的json unmarshal和 k8s的deepcopy对比
  • 数据结构:最小生成树的普里姆算法和克鲁斯卡尔算法
  • 记录学习的第二十六天
  • 【ISP】AWB的基本原理介绍(基于灰度像素检测)
  • 【数据结构 · 初阶】- 带头双向循环链表
  • java Stream流
  • 【高阶数据结构】第三弹---图的存储与遍历详解:邻接表构建与邻接矩阵的BFS/DFS实现
  • PasteForm框架开发之Entity多级嵌套的表单的实现
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第八讲)
  • 五一期间7名游客接连被困青海荒漠,警方提醒严禁非法穿越
  • 联合国秘书长吁印巴“最大程度克制”,特朗普:遗憾,希望尽快结束冲突
  • 俄乌交换205名被俘人员,俄方人员已抵达白俄罗斯
  • 特朗普称不会为了和中国谈判而取消对华关税,外交部回应
  • 繁荣活跃!“五一”假期全国重点零售和餐饮企业销售额同比增长6.3%
  • 新剧|《执法者们》《亲爱的仇敌》5月7日开播