mycat按照日期分片 水平分表

  • 准备与说明

场景

根据数据表日期类型字段,手动配置分片。这里举例:登录信息表(login_info)根据登录时间字段(login_date)的将数据存储到不同的节点

拆分方案及定义

  1. 在文章 https://blog.csdn.net/shuair/article/details/118885670(mycat水平分表) 描述内容的基础上,添加支付信息表(payment_info)
  2. mycat逻辑库:TESTDB103
  3. mysql物理库:两个节点,库名均为orders103

准备:提前搭建好mycat,可以参考文章:https://blog.csdn.net/shuair/article/details/118546292

  • 修改schema.xml

警告:所有的schema写在一起、所有的dataNode写在一起、所有的dataHost写在一起

<table name="login_info" dataNode="dn10301,dn10302" rule="orders-sharding-by-date"></table>
  • 修改rule.xml

警告:所有的tableRule写在一起、所有的function写在一起

<!-- 省略其它tableRule -->
<!-- 配置一个分表规则 -->
<tableRule name="orders-sharding-by-date">
	<rule>
                <!-- 分片字段 -->
    	        <columns>login_date</columns>
                <!-- 分片算法 -->
		<algorithm>orderspartbyday</algorithm>
        </rule>
</tableRule>
 
<!-- 省略其它function -->
<!-- 定义分片算法,后面有写好的算法partbyday,复制一份,调整内容即可 -->
<function name="orderspartbyday" class="io.mycat.route.function.PartitionByDate">
    <!-- 需要的日期格式 -->
    <property name="dateFormat">yyyy-MM-dd</property>
    <!-- 起始日期 -->
    <property name="sBeginDate">2021-01-01</property>
    <!-- 结束日期,设定了结束日期,则超过结束日期后会回到开始的节点循环分片,未设定结束日期时,数据无法分配到现有的节点上就会报错 -->
    <property name="sEndDate">2021-01-04</property>
    <!-- 分区天数,几天分到一片 -->
    <property name="sPartionDay">2</property>
</function>

重启mycat

  • 创建数据表

可以在mycat窗口创建数据表,但是可能会出现异常,这里直接在mysql数据库创建表,两个节点分别创建支付信息表 (login_info)

DROP TABLE IF EXISTS login_info;
CREATE TABLE login_info ( `id` INT auto_increment PRIMARY KEY COMMENT '主键', `user_id` INT COMMENT '用户编号', `login_date` date COMMENT '登录日期' );
  • 添加测试数据

在mycat窗口添加测试数据

INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 1, 101, '2021-01-01' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 2, 102, '2021-01-02' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 3, 103, '2021-01-03' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 4, 104, '2021-01-04' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 5, 103, '2021-01-05' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 6, 104, '2021-01-06' );

此时查看两个数据库节点就可以看到数据的分片效果了:数据1、2、5、6在节点1上,数据3、4在节点2上

此时mycat按照日期分片就配置完成了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值