Massively Parallel Processing

MPP 核心思想是把大任务拆成小任务,多个节点同时干。Redshift MPP体现在:

  • data loading

  • data queries

  • data exporting


数据分布(Distribution)

Redshift根据distribution key来让数据均匀分布到每个节点上,这一步也叫partitioning,进行查询时每个节点都能进行工作,而且保证了集群的可扩展性。

数据按策略分散到各节点:

分布方式 说明 适用场景
KEY 按某列哈希分布 JOIN 键相同的表
EVEN 轮询均匀分布 无明显 JOIN 关系
ALL 每个节点存全量副本 小维度表
AUTO Redshift 自动选择 默认推荐
-- 指定分布键
CREATE TABLE orders (
    order_id INT,
    customer_id INT,
    amount DECIMAL
)
DISTKEY(customer_id);  -- 按 customer_id 分布

MPP 体现:数据物理上分散存储,每个节点只存一部分

并行扫描

SELECT * FROM orders WHERE amount > 1000;
                Leader Node
                     │
       发送相同查询给所有节点
     ┌───────────────┼───────────────┐
     ▼               ▼               ▼
┌─────────┐    ┌─────────┐    ┌─────────┐
│Compute 1│    │Compute 2│    │Compute 3│
│扫描本地  │    │扫描本地  │    │扫描本地  │
│数据分片  │    │数据分片  │    │数据分片  │
└────┬────┘    └────┬────┘    └────┬────┘
     │              │              │
     └──────────────┼──────────────┘
                    ▼
               Leader 汇总

image-20221025091853275

MPP 体现:N 个节点同时扫描,速度理论上快 N 倍。

另外MPP不仅体现在查询上,也体现在加载和卸载数据的过程中,Redshift也可以从S3的manifest中并行加载多个文件,而不是一个一个文件的加载,这样加载数据的速度会快很多。在将数据导出到S3时,Redshift也可以并行工作