MPP 核心思想是把大任务拆成小任务,多个节点同时干。Redshift MPP体现在:
data loading
data queries
data exporting
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 汇总

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