记一次mycat日活量数亿级别分库分表方案及数据迁移

本文介绍了在面临日活量数亿级别的短信下发业务时,如何使用mycat进行分库分表策略,包括手机号对200取模决定分库,日期决定分区。为减少多表查询,优化了字段布局。数据迁移过程中,由于mycat不支持select into,选择了load data方式进行百万级数据快速导入,并分享了数据分割与导入的脚本方法。
摘要由CSDN通过智能技术生成

先说一下业务场景。项目是负责公司短信下发的,目前每日下发量大概在千万级别,采取了每天一张表的分表方案,但为了后续新的发送方接入,需要支持每日近亿级别的发送量,此时每天一张发送日志表的分表方案明显已不再支持。经过激烈讨论,我们引入了mycat的解决方案。

考虑到发送量的大小,我们对发送日志表进行了分库分区操作,保证每一个库和区能够均匀承担数据压力,我们决定对两个字段进行取模。即手机号对200取模决定在哪一个库(分了两百个库,每天一个分区),再传入日期(比如20200127),决定数据落在哪一个分区。

mycat多表查询时会先拿到数据再进行逻辑处理,所以我们设计的时候秉持着尽量分表单表定向查询的原则,把原来一些需要联合查询的字段都放到了rcs_send_log这张分库表中。

partition_name varchar(12) DEFAULT NULL COMMENT ‘表分区字段-年月日’,
db_split varchar(20) DEFAULT NULL COMMENT ‘分库字段 (手机号)’

对于知道 partition_name和db_split的增删改查语句,我们能够很快的查询出该记录。但对于批量查询,能避免则避免,无法避免时,通过查询每个库去得到执行结果。

通过在sql语句前加下面这一行,去指定库
/**mycat:dataNode=${dataNodeName}*/
类似这种
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值