动态增减分区

和MySQL水平分区表一样, UDDB还能够在Range/List分区功能的基础上, 提供动态增/减分区的能力。示例如下:

create table t(
uid int primary key, 
create_time timestamp
) 
upartition by range(unix_timestamp(create_time)) 
usubpartition by hash(ID)
usubpartitions 2(
upartition m1 values less than (unix_timestamp('2017-02-01')), 
upartition m2 values less than (unix_timestamp('2017-03-01')), 
upartition m3 values less than (unix_timestamp('2017-04-01'))
);

该建表语句创建了3个分区,允许存储的记录最大时间为2017-04-01 0点之前。 假如要存储2017年4月份的数据,我们可以动态增加一个分区:

alter table t add upartition(upartition m4 values less than (unix_timestamp('2017-05-01')));

如果2017年2月1号之前的数据不再需要,可以直接删除该分区:

alter table t drop upartition m1;

添加/删除分区的操作,在UDDB内部只是在存储节点上create/drop了相关的子表,并修改了UDDB元数据,不影响业务的正常访问。

对于List分区,UDDB也同样提供动态增/减分区的能力:

create table t
(uid int not null,
dt 	 datetime not null
 )
UPARTITION BY LIST(dayofweek(dt)) 
(
UPARTITION p1 VALUES IN  (1),
UPARTITION p2 VALUES IN  (2),
UPARTITION p3 VALUES IN  (3),
UPARTITION p4 VALUES IN  (4),
UPARTITION p5 VALUES IN  (5),
UPARTITION p6 VALUES IN  (6),
UPARTITION p7 VALUES IN  (7)
);

删除某个分区:

alter table t drop upartition p2;

增加一个分区:

alter table t add upartition(upartition p2 VALUES IN (2));