GaussDB和Teradata分片功能对比
在 Teradata 中,控制数据物理分布的机制叫做主索引。它的核心作用和 DISTRIBUTE BY HASH 完全一致:通过哈希算法决定每一行数据应该存放在哪个AMP上。
语法对比
语法关键词 |
|
|
作用 | 指定分片键,数据按该列的哈希值分布到不同DN | 指定主索引,数据按该列的哈希值分布到不同AMP |
唯一性约束 | 默认不强制唯一 | 可指定
保证全局唯一 |
sql
-- GaussDB 语法
CREATE TABLE orders (
order_id BIGINT,
user_id INT,
amount DECIMAL
) DISTRIBUTE BY HASH(user_id);
-- Teradata 语法(功能等价的写法)
CREATE TABLE orders (
order_id BIGINT,
user_id INT,
amount DECIMAL
) PRIMARY INDEX (user_id);
两者核心机制的对等关系
Teradata 和 GaussDB 在分布式架构的设计理念上惊人地一致,你可以从下表清楚地看到它们之间的映射关系:
数据分布策略 |
|
(PI) |
计算节点 | DN (Data Node) | AMP (Access Module Processor) |
节点间网络 | 高速网络 | BYNET |
分布键原则 | 选择高基数、常用于JOIN的列 | 选择高基数、常用于JOIN的列 |
数据倾斜问题 | 分布键选择不当会导致数据不均 | 同样存在,需用
等函数监控 |
一个关键区别:分区主索引 (PPI)
Teradata 有一个非常强大的特性叫分区主索引,它允许在 PRIMARY INDEX 的基础上再进行表内分区。这和你之前问过的 "GaussDB里分区和分片有什么区别" 中的组合使用思路是相通的。
sql
-- Teradata 的 PPI 示例:数据先按 user_id 哈希分布,再按 order_date 分区
CREATE TABLE orders (
order_id BIGINT,
user_id INT,
order_date DATE,
amount DECIMAL
)
PRIMARY INDEX (user_id)
PARTITION BY RANGE_N(order_date BETWEEN DATE '2024-01-01' AND DATE '2024-12-31' EACH INTERVAL '1' MONTH);
它的优势在于:既能利用哈希分布实现并行处理,又能通过分区快速裁剪数据、高效管理历史数据。GaussDB 中要实现类似效果,需要分别指定 DISTRIBUTE BY 和 PARTITION BY 子句。
查看22道真题和解析