PolarDB-X实例支持3种类型的表:分区表、广播表和单表。前面的文章已经实践过分区表了,本文将介绍单表和广播表的操作,以及不同表类型之间的相互转换。

一、单表

PolarDB-X允许创建表时通过指定关键字SINGLE来创建单表(不进行任何分区的表),示例DDL如下:

CREATE TABLE single_tbl( id bigint not null auto_increment, bid int, name varchar(30), primary key(id) ) SINGLE;

查看该逻辑表的节点拓扑:

show topology from single_tbl;

如图所示,只有一个分区,也就是单表。

polardb数据库免费吗(PolarDB-X数据库和表操作实践)(1)

二、广播表

PolarDB-X允许创建表时通过指定关键字BROADCAST来创建广播表(该表将在所有DN节点上有一份数据完全相同的拷贝),示例DDL如下:

CREATE TABLE broadcast_tbl( id bigint not null auto_increment, bid int, name varchar(30), primary key(id) ) BROADCAST;

查看该逻辑表的节点拓扑:

show topology from broadcast_tbl;

如果PolarDB-X 集群中有三个DN 节点,那么就会在三个DN 节点上相同的表,如图所示:

polardb数据库免费吗(PolarDB-X数据库和表操作实践)(2)

三、表类型转换

PolarDB-X实例支持3种类型的表:分区表、广播表和单表。我们可以通过ALTER TABLE语句将表的类型在分区表、广播表和单表之间进行转换,同时还能对分区表的分区策略进行变更。

polardb数据库免费吗(PolarDB-X数据库和表操作实践)(3)

(1)单表或广播表变为分区表

因业务扩展,单表 single_tbl 无法承载日益增长的数据。此时,可以使用如下语句将该单表变更为分区表(以 id 为分区键,采用KEY分区策略):

ALTER TABLE single_tbl PARTITION BY KEY(`id`);

polardb数据库免费吗(PolarDB-X数据库和表操作实践)(4)

如需指定分区数量,可以使用如下语句:

ALTER TABLE single_tbl PARTITION BY KEY(`id`) PARTITIONS 8;

(2)单表或分区表变为广播表

可以使用如下语句将单表或分区表 single_tbl 变更为广播表:

ALTER TABLE single_tbl BROADCAST;

执行完成之后,可以该逻辑表的节点拓扑,以及查看full create table 语句,如图所示:

polardb数据库免费吗(PolarDB-X数据库和表操作实践)(5)

(3)广播表或分区表变为单表

可以使用如下语句将广播表或分区表 single_tbl 变更为单表:

ALTER TABLE single_tbl SINGLE;

或者:

ALTER TABLE single_tbl REMOVE PARTITIONING;

polardb数据库免费吗(PolarDB-X数据库和表操作实践)(6)

四、变更分区表的分区策略

使用如下语句在PolarDB-X数据库中创建了一张分区表 part_order(根据order_id列进行KEY分区):

CREATE TABLE part_order ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `order_id` varchar(20) DEFAULT NULL, `buyer_id` varchar(20) DEFAULT NULL, `seller_id` varchar(20) DEFAULT NULL, `order_snapshot` longtext DEFAULT NULL, `order_detail` longtext DEFAULT NULL, PRIMARY KEY (`id`), KEY `l_i_order` (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PARTITION BY KEY(`order_id`);

执行过程如下所示:

polardb数据库免费吗(PolarDB-X数据库和表操作实践)(7)

现需要对part_order表的分区策略作出如下变更:

可以使用如下语句实现上述变更:

ALTER TABLE part_order PARTITION BY KEY(order_id, buyer_id) PARTITIONS 8;

polardb数据库免费吗(PolarDB-X数据库和表操作实践)(8)

,