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-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-X实例支持3种类型的表:分区表、广播表和单表。我们可以通过ALTER TABLE语句将表的类型在分区表、广播表和单表之间进行转换,同时还能对分区表的分区策略进行变更。
(1)单表或广播表变为分区表
因业务扩展,单表 single_tbl 无法承载日益增长的数据。此时,可以使用如下语句将该单表变更为分区表(以 id 为分区键,采用KEY分区策略):
ALTER TABLE single_tbl PARTITION BY KEY(`id`);
如需指定分区数量,可以使用如下语句:
ALTER TABLE single_tbl PARTITION BY KEY(`id`) PARTITIONS 8;
(2)单表或分区表变为广播表
可以使用如下语句将单表或分区表 single_tbl 变更为广播表:
ALTER TABLE single_tbl BROADCAST;
执行完成之后,可以该逻辑表的节点拓扑,以及查看full create table 语句,如图所示:
(3)广播表或分区表变为单表
可以使用如下语句将广播表或分区表 single_tbl 变更为单表:
ALTER TABLE single_tbl SINGLE;
或者:
ALTER TABLE single_tbl REMOVE PARTITIONING;
四、变更分区表的分区策略
使用如下语句在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`);
执行过程如下所示:
现需要对part_order表的分区策略作出如下变更:
- 根据order_id列以及buyer_id进行KEY分区。
- 共包含8个分区。
可以使用如下语句实现上述变更:
ALTER TABLE part_order PARTITION BY KEY(order_id, buyer_id) PARTITIONS 8;
,