GaussDB和Teradata分片功能对比

在 Teradata 中,控制数据物理分布的机制叫做主索引。它的核心作用和 DISTRIBUTE BY HASH 完全一致:通过哈希算法决定每一行数据应该存放在哪个AMP上。

语法对比

语法关键词

DISTRIBUTE BY HASH (column)

PRIMARY INDEX (column)

作用

指定分片键,数据按该列的哈希值分布到不同DN

指定主索引,数据按该列的哈希值分布到不同AMP

唯一性约束

默认不强制唯一

可指定

UNIQUE PRIMARY INDEX

保证全局唯一

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 在分布式架构的设计理念上惊人地一致,你可以从下表清楚地看到它们之间的映射关系:

数据分布策略

DISTRIBUTE BY HASH

PRIMARY INDEX

 (PI)

计算节点

DN (Data Node)

AMP (Access Module Processor)

节点间网络

高速网络

BYNET

分布键原则

选择高基数、常用于JOIN的列

选择高基数、常用于JOIN的列

数据倾斜问题

分布键选择不当会导致数据不均

同样存在,需用

HASHAMP

等函数监控

一个关键区别:分区主索引 (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 子句。

全部评论

相关推荐

03-30 23:51
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务