深入浅出MySQL(七) 如何通俗地来理解表的横向拆分的实现原理

33 篇文章 0 订阅
13 篇文章 0 订阅

今天的这个案例主要是正对于讲解这个Mysql的横向拆分技术:
当然这篇文章的主要是简单介绍横向拆分的一个具体思路和过程,主要是提供一种简单的思路而已。
首先我们来模拟一个场景,用户表里面有着一千万的数据量的内容,这个时候我们该如何进行优化呢?
这个时候不妨试试用横向拆分的技术来进行优化。
首先我们来看看数据库里面的内容:
这里写图片描述
一共有一千万条数据信息,这个时候我们可以继续深入:
假设有一个请求要开展用户搜索:

SELECT * from user where username like '9990%' 

消耗时间如下:
这里写图片描述

假设现在到了一个高峰时期,我们同时有上万个在线用户,同时要对user表进行大量的请求和访问,那么就会对user表造成相当巨大的压力,这样我们就需要对该表的压力进行相应的分担。
此时我们不妨可以试试横向分表的思想来进行优化:
例如说我们使用一定的技巧:
取模分表法
首先我们可以将user表扩展为10张:
这里写图片描述

INSERT INTO user_1 (id, username, PASSWORD, age) SELECT id,username,password,age 
FROM `user` where id%10=0

使用取模的思想将主表user的数据分割放在了剩余的10张表里面。
如:

INSERT INTO user_2 (id, username, PASSWORD, age)SELECT id,username,password,age FROM `user` where id%10=1

INSERT INTO user_3 (id, username, PASSWORD, age)SELECT id,username,password,age FROM `user` where id%10=2

就这样一步步地将主表(user)里面的数据拆分存储在不同的从表(user_1,user_2…)里面去
这里写图片描述
同理,我们对十张从表进行数据插入操作
这样的话,一张表的压力就会被缩小了十倍了。(暂时不考虑数据访问的冷热性)那么这个时候我们进行搜索的时候就可以通过id的范围来进行分表查询了。
1-10号user表里面的数据可以根据id来确定查询的范围大小。
下边就是一个结合mybatis的查询案例了(一千万数据起步):
其实关于sql部分的查询内容基本如下所示:
这里写图片描述
在我们的sql设计部分里面,有一个table_index的设置,这个table_index设置可以通过相应的id来进行区分:
这里写图片描述
然后我开启dubbo服务之后,我们使用swagger远程调用这个rpc接口之后即
进行测试了:
这里写图片描述
相应的sql内容如下所示:
这里写图片描述
这样子的设计就能够较好地减轻对于数据表的压力了。

感兴趣的读者也可以关注小编的个人公众号,我会定期在上边分享一些有价值的java知识内容

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值