中间件--ClickHouse-9--MPP架构(分布式计算架构)

news2025/4/20 1:54:25

1、MPP 架构基础概念

MPP(Massively Parallel Processing 大规模并行处理) 是一种分布式计算架构,专门设计用来高效处理大规模数据集。在这种架构下*,数据库被分割成多个部分,每个部分可以在不同的服务器节点上并行处理*。这意味着,当执行一个查询时,它可以被分解为许多小的任务,并且这些任务可以同时在多个节点上运行,从而极大地提高查询性能和系统的整体吞吐量。

MPP(大规模并行处理)是一种分布式计算架构,其核心特点是:
(1)、共享无(Share-Nothing):每个节点独立存储和计算,节点间通过网络通信,无共享资源(如内存或磁盘)。
(2)、分布式并行计算:数据分片存储在多个节点上,查询时各节点并行处理自己的数据分片,最终合并结果。
(3)、高扩展性:通过增加节点数线性提升计算和存储能力

ClickHouse的MPP架构是其高性能查询的核心支撑,尤其适用于OLAP场景(如大数据分析、实时报表等)。

2、ClickHouse 的 MPP 架构设计

(1)、核心组件

ClickHouse的MPP架构主要由以下组件构成:
在这里插入图片描述
说明:

  • 协调节点
    协调节点(Coordinator)也称为查询发起节点,是客户端连接并提交查询请求的地方。这个节点负责解析查询、制定执行计划,并将执行任务分配给相关的数据节点。此外,它还负责收集来自各个数据节点的中间结果,并对它们进行整合以生成最终的查询结果返回给客户端。

  • 数据节点
    实际存储数据并执行由协调节点分配的任务的节点。每个数据节点都包含一部分完整的数据集,并能够独立地执行查询任务。这种设计使得查询可以并行执行,从而提高查询性能。

(2)、ClickHouse中的分片机制

在ClickHouse中,数据通常会根据一定的规则被分割成多个部分,每部分被称为一个“分片”。分片可以跨多个服务器部署,这有助于扩展系统容量以及提升查询处理速度。

  • 每个分片都可以配置为独立运行,即所有副本都是平等的,没有明确的领导者或跟随者之分。
  • 在某些高可用性配置中,可能会采用类似主备(Primary-Secondary)的复制方案,其中有一个主要副本(可以视为leader)负责写操作,而其他副本同步该主要副本的数据。然而,读操作可以从任意副本执行,以此提供负载均衡和故障转移能力。
  • 在ClickHouse中,分片并不严格遵循leader-follower结构,而是依赖于具体的配置和需求。这种灵活性允许用户根据自己的应用场景选择最合适的部署方式。对于需要高可用性的场景,可以通过设置多副本和适当的复制策略来实现。而对于追求极致性能的应用,则可以考虑通过增加分片数量来横向扩展系统。

(3)、数据分片与分布

  • 分片策略:
    数据按规则(如哈希、范围)分发到不同分片,常见策略包括:
    • 哈希分片:cityHash64(column) 将数据均匀分布到分片。
    • 范围分片:按时间或数值范围划分数据(如按年分区)。
  • 副本机制:
    每个分片有多个副本(如 3 副本),通过 ZooKeeper 管理元数据和故障转移。

3、查询执行流程

以下是 ClickHouse 分布式查询的典型执行流程:

(1)、查询解析与优化

  • 协调节点(Coordinator)解析 SQL,生成逻辑执行计划。
  • 根据分布式表的元数据,确定参与计算的分片。

(2)、分布式执行

  • 协调节点将查询计划分发到各个分片节点。
  • 分片节点并行计算:每个节点独立处理本地数据,执行扫描、过滤、聚合等操作。
  • 数据交换(Data Shuffling):若需要跨分片聚合(如 GLOBAL IN PROGRESS),数据通过网络传输。

(3)、结果合并

  • 协调节点收集各分片的中间结果,进行最终聚合或排序。
  • 返回最终结果给客户端。

(4)、核心特性

在这里插入图片描述

4、MPP 架构的优势

(1)、高性能查询

  • 并行计算:数据分片并行处理,线性提升计算能力。
  • 向量化执行:通过 SIMD 指令并行处理数据块(如 4-8 行同时计算)。
  • 列式存储:减少 I/O,加速过滤和聚合操作。

(2)、水平扩展

  • 弹性扩容:通过增加分片或副本,线性提升存储和计算能力。
  • 动态分片:支持在线添加节点,无需停机。

(3)、高可用性

  • 副本容错:副本节点故障时自动切换,保证服务连续性。
  • 数据冗余:副本存储相同数据,避免单点故障。

(4)、低延迟

  • 分布式计算:减少单节点负载,避免资源争用。
  • 本地计算:数据存储与计算在同一节点,减少网络延迟。

5、MPP 架构的典型应用场景

(1)、大数据分析

  • 场景:分析 PB 级日志数据(如用户行为、点击流)。
  • 示例:
  -- 查询过去一年各地区的销售额
  SELECT region, SUM(sales) 
  FROM distributed_sales_table 
  WHERE date BETWEEN '2023-01-01' AND '2023-12-31' 
  GROUP BY region;
  • 优势:分片并行计算,秒级返回结果。

(2)、实时报表

  • 场景:实时生成业务报表(如广告投放效果、用户活跃度)。
  • 示例:
  -- 实时统计当前小时的用户登录次数
  SELECT COUNT(*) 
  FROM distributed_login_events 
  WHERE event_time >= NOW() - INTERVAL 1 HOUR;

(3)、复杂聚合查询

  • 场景:多维度聚合(如按时间、地域、产品分类统计)。
  • 示例:
  -- 按天、地区、产品分类统计销售额
  SELECT 
    date, 
    region, 
    product_category, 
    SUM(sales) 
  FROM distributed_sales 
  GROUP BY date, region, product_category;

6、MPP 架构的实现细节

(1)、分布式表(Distributed Table)

  • 定义:通过 Distributed 引擎创建逻辑表,指向分片的本地表。
    sql示例:
  CREATE TABLE distributed_table 
  (
    id UInt64,
    name String,
    create_time DateTime
  ) ENGINE = Distributed('cluster_name', 'local_database', 'local_table', rand());
- 参数说明:  
  - cluster_name:集群名称。  
  - local_database:本地数据库名。  
  - local_table:本地表名。  
  - rand():分片键(如随机分片)。

(2)、分片与副本配置

  • 分片配置示例:
    sql示例:
  -- 创建分片和副本(通过 ZooKeeper 管理)
  CREATE CLUSTER company_cluster LOCAL
  (
      shard 1,
      '192.168.1.100:9000'
  )
  AS company_replica1;

  CREATE CLUSTER company_cluster shard 1
  (
      replica 1,
      '192.168.1.100:9000'
  );

(3)、查询优化技巧

  • 分区裁剪(Partition Pruning):
    通过 PARTITION BY 定义分区,查询时自动过滤无关分区。
    sql示例:
  CREATE TABLE sales 
  (
    id UInt64,
    amount Float64,
    create_time DateTime
  ) ENGINE = MergeTree()
  PARTITION BY toYYYYMM(create_time)
  ORDER BY id;
  • 预聚合(Aggregation Pushdown):
    在分片内完成部分聚合,减少数据传输量。
    sql示例:
  SELECT 
    region, 
    SUM(sales) 
  FROM distributed_sales 
  GROUP BY region 
  SETTINGS distributed_aggregation = 1;

7、MPP 架构的局限性

(1)、复杂 JOIN 的限制

  • 跨分片的 JOIN 需要全表数据传输,可能产生性能瓶颈。
  • 建议通过预处理或物化视图优化。

(2)、数据一致性延迟

  • 分布式事务仅保证最终一致性,不支持跨分片 ACID 事务。

(3)、配置复杂度

  • 需要合理设计分片键,避免数据倾斜(如哈希分片键选择不当)。

8、总结

ClickHouse 的 MPP 架构 通过分布式并行计算、列式存储和向量化执行,实现了 “亿级数据秒级响应” 的性能。其核心优势在于:

  • 高性能:适合海量数据的分析型查询。
  • 高扩展:通过分片和副本轻松扩展存储和计算能力。
  • 易用性:通过 SQL 接口和分布式表透明化分布式计算。

在实际应用中,合理设计分片策略、利用分区裁剪和预聚合,可以最大化 MPP 架构的性能优势。对于需要处理 PB 级数据的 OLAP 场景(如日志分析、实时报表),ClickHouse 是一个极具竞争力的选择。

逆风翻盘,Dare To Be!!!

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

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

相关文章

分布式计算领域的前沿工具:Ray、Kubeflow与Spark的对比与协同

在当今机器学习和大数据领域,分布式计算已成为解决大规模计算问题的关键技术。本文将深入探讨三种主流分布式计算框架——Ray、Kubeflow和Spark,分析它们各自的特点、应用场景以及如何结合它们的优势创建更强大的计算平台。 Spark批量清洗快,…

每天学一个 Linux 命令(20):find

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/20/index.html find 是 Linux 系统中最强大的文件搜索工具之一,支持按名称、类型、时间、大小、权限等多种条件查找文件,并支持对搜索结果执行操作(如删除、复制、执行命令等)。掌握 find 可大幅提升文件管理效率…

Winform发展历程

Windows Forms (WinForms) 发展历程 起源与背景(1998-2002) Windows Forms(简称WinForms)是微软公司推出的基于.NET Framework的GUI(图形用户界面)开发框架,于2002年随着.NET Framework 1.0的…

npx 的作用以及延伸知识(.bin目录,npm run xx 执行)

文章目录 前言原理解析1. npx 的作用2. 为什么会有 node_modules/.bin/lerna3. npx 的查找顺序4. 执行流程总结1: 1. .bin 机制什么是 node_modules/.bin?例子 2. npx 的底层实现npx 是如何工作的?为什么推荐用 npx?npx 的特殊能力…

本地部署DeepSeek-R1(Dify升级最新版本、新增插件功能、过滤推理思考过程)

下载最新版本Dify Dify1.0版本之前不支持插件功能,先升级DIfy 下载最新版本,目前1.0.1 Git地址:https://github.com/langgenius/dify/releases/tag/1.0.1 我这里下载到老版本同一个目录并解压 拷贝老数据 需先停用老版本Dify PS D:\D…

【ubuntu】在Linux Yocto的基础上去适配Ubuntu的wifi模块

一、修改wifi的节点名 1.找到wifi模块的PID和VID ifconfig查看wifi模块网络节点的名字,发现是wlx44876393bb3a(wlxmac地址) 通过udevadm info -a /sys/class/net/wlx44876393bba路径的命令去查看wlx44876393bba的总线号,端口号…

25软考新版系统分析师怎么备考?重点考哪些?(附新版备考资源)

软考系统分析师(高级资格)考试涉及知识面广、难度较大,需要系统化的复习策略。以下是结合考试大纲和历年真题整理的复习重点及方法: 一、明确考试结构与分值分布 1.综合知识(选择题,75分) 2…

PyTorch入门------卷积神经网络

前言 参考:神经网络 — PyTorch Tutorials 2.6.0cu124 文档 - PyTorch 深度学习库 一个典型的神经网络训练过程如下: 定义一个包含可学习参数(或权重)的神经网络 遍历输入数据集 将输入通过神经网络处理 计算损失(即…

Edge浏览器安卓版流畅度与广告拦截功能评测【不卡还净】

安卓设备上使用浏览器的体验,很大程度取决于两个方面。一个是滑动和页面切换时的反应速度,另一个是广告干扰的多少。Edge浏览器的安卓版本在这两方面的表现比较稳定,适合日常使用和内容浏览。 先看流畅度。Edge在中端和高端机型上启动速度快&…

Docker 和 Docker Compose 使用指南

Docker 和 Docker Compose 使用指南 一、Docker 核心概念 镜像(Image) :应用的静态模板(如 nginx:latest​)。容器(Container) :镜像的运行实例。仓库(Registry&#xf…

vue3环境搭建、nodejs22.x安装、yarn 1全局安装、npm切换yarn 1、yarn 1 切换npm

vue3环境搭建 node.js 安装 验证nodejs是否安装成功 # 检测node.js 是否安装成功----cmd命令提示符中执行 node -v npm -v 设置全局安装包保存路径、全局装包缓存路径 在node.js 安装路径下 创建 node_global 和 node_cache # 设置npm全局安装包保存路径(新版本…

Python人工智能 使用可视图方法转换时间序列为复杂网络

基于可视图方法的时间序列复杂网络转换实践 引言 在人工智能与数据科学领域,时间序列分析是一项基础且重要的技术。本文将介绍一种创新的时间序列分析方法——可视图方法,该方法能将时间序列转换为复杂网络,从而利用复杂网络理论进行更深入…

spring:加载配置类

在前面的学习中,通过读取xml文件将类加载,或他通过xml扫描包,将包中的类加载。无论如何都需要通过读取xml才能够进行后续操作。 在此创建配置类。通过对配置类的读取替代xml的功能。 配置类就是Java类,有以下内容需要执行&#…

从零搭建一套前端开发环境

一、基础环境搭建 1.NVM(Node Version Manager)安装 简介 nvm(Node Version Manager) 是一个用于管理多个 Node.js 版本的工具,允许开发者在同一台机器上轻松安装、切换和使用不同版本的 Node.js。它特别适合需要同时维护多个项目&#xff…

金融数据库转型实战读后感

荣幸收到老友太保科技有限公司数智研究院首席专家林春的签名赠书。 这是国内第一本关于OceanBase数据库实际替换过程总结的的实战书。打个比方可以说是从战场上下来分享战斗经验。读后感受颇深。我在这里讲讲我的感受。 第三章中提到的应用改造如何降本。应用改造是国产化替换…

代码审计系列2:小众cms oldcms

目录 sql注入 1. admin/admin.php Login_check 2. admin/application/label/index.php 3. admin/application/hr/index.php 4. admin/application/feedback/index.php 5. admin/application/article/index.php​ sql注入 1. admin/admin.php Login_check 先看一下p…

Cursor + MCP,实现自然语言操作 GitLab 仓库

本分分享如何使用 cursor mcp 来操作极狐GitLab 仓库,体验用自然语言在不接触极狐GitLab 的情况下来完成一些仓库操作。 极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitL…

Vue el-from的el-form-item v-for循环表单如何校验rules(一)

实际业务需求场景: 新增或编辑页面(基础信息表单,一个数据列表的表单),数据列表里面的表单数是动态添加的。数据可新增、可删除,在表单保存前,常常需要做表单必填项的校验,校验通过以…

【Reading Notes】(8.3)Favorite Articles from 2025 March

【March】 雷军一度登顶中国首富,太厉害了(2025年03月02日) 早盘,小米港股一路高歌猛进,暴涨4%,股价直接飙到52港元的历史新高。这一波猛如虎的操作,直接把雷军的身家拉到了2980亿元&#xff0c…

从PDF到播客:MIT开发的超越NotebookLM的工具

NotebookLM是谷歌推出的更具创意的AI产品之一,几个月前刚刚推出。 许多人对它的能力感到惊叹——尤其是将长文本转化为两位播客主持人之间有趣对话的功能。 NotebookLM提供的不仅仅是这些,还包括聊天(问答)甚至生成思维导图。 如果你还没有尝试过NotebookLM,我强烈建议…