Mycat笔记

记录一下昨天搭起来的使用Mycat的mod-long分片规则实现的数据库分表分库,这个是在上一次点击打开链接的笔记的基础上实现的。其实是有一个任务,如果现在我有8000w的数据量,而且每月订单会有1000w,那么数据库表应该怎么设计,从设计到检索,做一个demo出来,要求,检索在2s内完成。

设计的话,第一次的设计用的是三范式,被领导推翻了,说要采用冗余字段,设计得还比较粗糙。今天暂时不涉及设计,拿一个例子来说。

假设company表就是我的订单表,由于数据量太大,我需要对表进行数据得水平切分,分到不同得节点上,我才用取模的方式,比如我分成16张表(表的张数一般是2的整数倍)。我才用的基数是表的id,那么id%16,如果余数是0,放在company_0这张表中,余数是1放在company_1这张表中,以此类推。

首先,在schema.xml配置文件中将company表的table标签的的rule属性值改为mod-long,意思就是使用取模的规则进行路由。

由于订单的数据量是增长很快的,我在表的设计中采用bigint类型,那么对应java中Long类型,至于这个订单id的生成我是采用redis的incr每次生成一个全局唯一的id,由于redis 是单线程的,基于内存的读取,速度会很快。每次我拿到这个值作为订单的id插入数据库,当我的sql语句到达mycat的时候,mycat 会对sql进行对应的处理,然后根据对应的规则,将数据插入到对应的分片表中。当要取数据的时候也是根据id和对应的规则去对应的分片表中去取数据。

这些中间过程我们只要在配置文件中配置就可以了,其他的就交给mycat中间件来解决。

贴一下代码大笑(首先得安装redis哦)


代码有点乱,反正是笔记,我自己看得懂,哈哈

注意:上面数据库连接的是mycat,然后id的key我是存放在配置文件中的,



只要是订单的id,我都是根据这个key生成对应的value值作为id的值。

测试结果如下:(注意注意:我这里是用了2张表作为举例,不是16张,所以应该就是偶数的id在一张表中,奇数的id 在一张表中)它们是分别在不同的节点下的表中的数据。


搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值