shardingProxy distsql动态添加分表

本次使用shardingProxy版本为5.5.1,mysql为5.7

一般情况我们都是使用配置文件配置shardingProxy的分库分表规则,其实shardingProxy支持动态分配创建分表规则的,下面记录下操作步骤

1、使用CREATE SHARDING TABLE RULE创建分表规则,

具体的语法定义可以参考官网

1.1创建自动时间规则的分表规则

CREATE SHARDING TABLE RULE t_month_table(
STORAGE_UNITS(ds_0),
SHARDING_COLUMN=data_year_month,
TYPE(NAME="AUTO_INTERVAL",PROPERTIES(
		"SHARDING_COLUMN"="data_year_month",
        ## "datetime-pattern"="yyyyMM",
        "datetime-lower"="2025-01-01 00:00:00",
        ## "datetime-upper"="2025-07-01 00:00:00",
        ## "sharding-suffix-pattern"="yyyyMM",
        ## "datetime-interval-amount"="1",
        ## "datetime-interval-unit"="MONTHS",
        "sharding-seconds" = 2592000
)),
KEY_GENERATE_STRATEGY(COLUMN=id,TYPE(NAME="snowflake"))
);

用workbench连接shardingProxy 后,执行上面语句,执行成功后,可以使用下面查询语句查询是否创建成功。

SHOW SHARDING TABLE RULES from db_time; ##db_time 为使用的数据库,也可以不加from db_time
SHOW SHARDING ALGORITHMS from db_time;

1.2创建表

CREATE TABLE `t_month_table` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `order_no` varchar(30) DEFAULT NULL,
  `user_id` bigint(20) DEFAULT NULL,
  `amount` decimal(10,2) DEFAULT NULL,
  `data_year_month` varchar(125) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=779468255126355969 DEFAULT CHARSET=utf8mb4;

创建表成功后,查询真实数据库,表的创建请客如下,说明创建成功。

1.3创建固定时间的分表

CREATE SHARDING TABLE RULE t_month_table2(
DATANODES("ds_${0}.t_month_table2${202501..202506}"),
TABLE_STRATEGY(TYPE="standard",SHARDING_COLUMN=data_year_month,
SHARDING_ALGORITHM(TYPE(NAME="INTERVAL",
PROPERTIES(
        "datetime-pattern"="yyyyMM",
        "datetime-lower"="202501",
        "datetime-upper"="202506",
        "sharding-suffix-pattern"="yyyyMM",
        "datetime-interval-amount"="1",
        "datetime-interval-unit"="MONTHS"
)))),
KEY_GENERATE_STRATEGY(COLUMN=id,TYPE(NAME="snowflake"))
);

创建表

CREATE TABLE `t_month_table2` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `order_no` varchar(30) DEFAULT NULL,
  `user_id` bigint(20) DEFAULT NULL,
  `amount` decimal(10,2) DEFAULT NULL,
  `data_year_month` varchar(125) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=779468255126355969 DEFAULT CHARSET=utf8mb4;

最后生成的表结果如下:

表是以年月后缀结尾的,更容易区分数据存放到哪张具体的表。

自动和固定时间的有个区别是:自动的如果超过定义的数据区域会把数据保存到最后一张表里面,而固定时间区域的则会直接报错,无法保存数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值