弹性伸缩 #
适用场景
高效扩容缩容。扩容可能做到不移动任何数据。缩容可能做到仅移动必要的部分数据。
前提条件
使用 autoTables 范围分片算法,比如:VOLUME_RANGE。
操作步骤
- 添加数据库资源。
REGISTER STORAGE UNIT ds_0 (
URL="jdbc:postgresql://host1:5432/scaling_ds_0",
USER="postgres",
PASSWORD="root",
PROPERTIES("minPoolSize"="1","maxPoolSize"="20","idleTimeout"="60000")
), ds_1 (
URL="jdbc:postgresql://host2:5432/scaling_ds_1",
USER="postgres",
PASSWORD="root",
PROPERTIES("minPoolSize"="1","maxPoolSize"="20","idleTimeout"="60000")
);
- 新建表规则。
CREATE SHARDING TABLE RULE t_order(
REGISTER STORAGE UNITS(ds_0,ds_1),
SHARDING_COLUMN=order_id,
TYPE(NAME="VOLUME_RANGE",PROPERTIES("range-lower"="1","range-upper"="100000000","sharding-volume"="10000000")),
KEY_GENERATE_STRATEGY(COLUMN=order_id,TYPE(NAME="snowflake"))
);
- 新建表。
CREATE TABLE t_order (order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id));
- 插入一些数据。
示例:
INSERT INTO t_order (order_id, user_id, status) VALUES
(1,2,'ok'),
(101,2,'ok'),
(201,2,'ok');
- 添加新的数据库资源。
REGISTER STORAGE UNIT ds_2 (
URL="jdbc:postgresql://host3:5432/scaling_ds_10",
USER="postgres",
PASSWORD="root",
PROPERTIES("minPoolSize"="1","maxPoolSize"="20","idleTimeout"="60000")
);
- 触发扩容。
RESHARD TABLE t_order BY(
STORAGE_UNITS(ds_0,ds_1,ds_2),
SHARDING_COLUMN=order_id,
TYPE(NAME="VOLUME_RANGE",PROPERTIES("range-lower"="1","range-upper"="150000000","sharding-volume"="10000000")),
KEY_GENERATE_STRATEGY(COLUMN=order_id,TYPE(NAME="snowflake"))
);
只创建新的分表,不移动数据。