暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从零开始学TiDB(7)TiDB 的MPP架构概述

kk的DBA随笔 2025-01-02
21

MPP 架构介绍:

如图,TiDB Server 作为协调者,首先 TiDB Server 会把每个 TiFlash 拥有的 region 会在 TiFlash 上做交换,让表连接在一个 TiFlash 上。另外 TiFlash 会作为计算节点,每个 TiFlash 都负责数据交换,表连接,聚合等等。

每个 TiFlash 在 MPP 架构里面称为一个 MPP worker。

MPP 的特点:

  1. 适合大量的 join 聚合查询
  2. 所有 MPP 计算是在内存中执行的,数据不落地。
  3. 只支持等值连接,不支持不等值连接(这意味着有一些 sql 用不了 MPP,这时候可以使用参数:Enforce_mpp 强制使用 MPP,但不支持等值连接就是不支持,执行后会警告)。

MPP 的执行流程:

首先,在这个 SQL 中,有一个表连接,两个过滤条件,一个聚合条件 。

TiFlash 在存储数据的时候会把数据分别存储在不同的 TiFlash 上,这个 SQL 的执行流程是:

1. 在每个 TiFlash 中过滤出 order 表里面 dic 列的前三个字母是 7c0 的数据放到内存中。把 product 表里面 pct_date 列大于‘2021-09-30’ 的数据放到内存中(并行执行)

2. 数据交换(减少网络交换),让表连接在本节点执行,对每一张表的连接项(pid)取一个 hash 函数,如取模。将数据根据 hash 值 进行数据交换,让 hash 值相同的数据在一个节点上。

3. 对 group by 进行提速,也是进行数据交换,对 state 取 hash 函数,把 hash 函数相等的放在一个节点。

 4. 把 TiFlash 的数据返回到 TiDB Server

 总结:TiDB 的 MPP 架构充分利用了 TiFlash 并行计算的功能, 当一个复杂的 SQL 语句过来的时候(能够使用 MPP),先利用表连接的条件把连接条件 Hash 值相同的数据放到一个节点上,防止网络交换严重,处理了过滤条件后,如有聚合条件,再利用聚合条件的字段进行数据交换,把聚合条件字段 hash 值相同的数据放到同一个数据节点中,最后每个 TiFlash 把计算好的数据返回给 TiDB Server。


文章转载自kk的DBA随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论