这两天项目中接到一个需求,好友系统,由于用户量比较多,好友关系又是多对多的关系,因此,到后期数据会急剧上升,因此需要分表,并且后期可以扩容。(单库多表)
1,首先是完成分表,这里分成20个表
Schema.xml文件配置如下
这里只配置单节点分表,分片规则为hash一致性分片
Rule.xml文件
根据user_id进行分片
分片方法中的count字段配置为分表的个数即可,注释为数据库节点数量不对,亲测:我只有一个节点,配置为1,插入的数据全到表0中去了。
登录mycat的数据端口查询数据验证:全部的数据
查询某个用户的数据
可以看到只查询了7表,至此,完成了分表。
考虑到后期数据会增大,20个表不够,所以需要扩容,扩容为单库50个表,也就是在原来的基础上新增30个表,同样用脚本先建好表。
3,扩容操作
1)复制 schema.xml、rule.xml 并重命名为 newSchema.xml、newRule.xml 放于 conf 目录下,必须命名为这两个文件名称,且在执行扩容操作之前,因为后续执行扩容脚本时会用到这两个文件名。
2)修改newSchema.xml、newRule.xml这两个文件的参数配置
只需要修改这两个地方就好了
3)修改 conf 目录下的 migrateTables.properties 配置文件,配置需要扩容的表,由于节点中只有一个表的分片表,因此,这个文件不用改。
4)修改 bin 目录下的 dataMigrate.sh 脚本文件,这个文件是扩容执行脚本文件,只需要配置一个参数,配置mysql的bin目录
5)执行dataMigrate.sh脚本,完成扩容
6)将newSchema.xml 和 newRule.xml 重命名为 schema.xml 和 rule.xml 并替换掉原文件,重启 mycat 服务,整个扩容缩容过程完成。
验证:
可以看到新插入的数据已经到了30表,但这里有个问题是,扩容前的数据还在原来的表中,并没有重新分到别的表,不知道是因为数据少(原来只有3条)的原因还是什么。至此完成了扩容。