数据分布策略

AnalyticDB PostgreSQL版支持三种数据在节点间的分布方式,分别是哈希(HASH)分布、随机(RANDOMLY)分布、复制(REPLICATED)分布。

数据分布策略

语法

CREATE TABLE table_name (...) [ DISTRIBUTED BY (column  [,..] ) | DISTRIBUTED RANDOMLY | DISTRIBUTED REPLICATED ]

哈希分布

DISTRIBUTED BY (column, [ ... ])

数据将根据分布列的哈希值将各个行分布到指定计算节点上,相同的哈希值会始终散列到同一计算节点。为保障数据可以均匀分布在各个节点上,建议您选择唯一键(例如主键)作为分布键。

AnalyticDB PostgreSQL版的默认分布策略为哈希分布,如果建表时未指定DISTRIBUTED子句,系统会选择主键或表的第一个合适的列作为分布键。如果表中没有合适的列,系统将会使用随机分布策略。

建表语句示例如下:

CREATETABLEproducts
(namevarchar(40),
 prod_idinteger,
 supplier_idinteger)DISTRIBUTEDBY(prod_id);

随机分布

DISTRIBUTED RANDOMLY

系统会按循环的方式将数据分布到各个计算节点上,但是相同值的数据可能不会分布到同一个计算节点。

随机分布仅建议您在没有合适的列作为分布列时使用。

建表语句示例如下:

CREATETABLErandom_stuff(thingstext,
                           doodadstext,
                           etctext)DISTRIBUTEDRANDOMLY;

复制分布

DISTRIBUTED REPLICATED

系统会在每个计算节点都保存一份表的全量数据。

如果数据库中存在大表与小表join的场景,您可以将足够小的表设置为复制分布来提升性能。

建表语句示例如下:

CREATETABLEreplicated_stuff(thingstext,
                               doodadstext,
                               etctext)DISTRIBUTEDREPLICATED;

创建了一个复制(Replicated)分布的表,每个 Segment 数据节点都存储有一个全量的表数据。