Logo
弹性伸缩

弹性伸缩 #

适用场景

高效扩容缩容。扩容可能做到不移动任何数据。缩容可能做到仅移动必要的部分数据。

前提条件

使用 autoTables 范围分片算法,比如:VOLUME_RANGE。

操作步骤

  1. 添加数据库资源。
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")
);
  1. 新建表规则。
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"))
);
  1. 新建表。
CREATE TABLE t_order (order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id));
  1. 插入一些数据。

示例:

INSERT INTO t_order (order_id, user_id, status) VALUES 
(1,2,'ok'),
(101,2,'ok'),
(201,2,'ok');
  1. 添加新的数据库资源。
REGISTER STORAGE UNIT ds_2 (
    URL="jdbc:postgresql://host3:5432/scaling_ds_10",
    USER="postgres",
    PASSWORD="root",
    PROPERTIES("minPoolSize"="1","maxPoolSize"="20","idleTimeout"="60000")
);
  1. 触发扩容。
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"))
);

只创建新的分表,不移动数据。