通俗易懂的Mysql表横向拆分

今天的这个案例主要是正对于讲解这个Mysql的横向拆分技术。这种技术在大型互联网公司里面经常有用到,而且网上的很多案例都只是一堆枯燥的理论知识,所以今天总结了一个简单的小demo供各位读者学习。

首先我们来模拟一个场景,用户表里面有着一千万的数据量的内容,这个时候我们该如何进行优化呢?

这个时候不妨试试用横向拆分的技术来进行优化。

首先我们来看看数据库里面的内容:

user表里面一共有一千万条数据信息,这个时候我们可以继续深入:

假设有一个请求要开展用户搜索:

SELECT*fromuserwhereusername

like'9990%'

消耗时间如下:

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

取模分表法

首先我们可以将user表扩展为10张:

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

就这样一步步地将主表(user)里面的数据拆分存储在不同的从表

(user_1,user_2..)里面去

我们对十张从表进行数据插入操作 ,1-10号user表里面的数据可以根据id来确定查询的范围大小。这样的话,一张表的压力就会被缩小了十倍了。(暂时不考虑数据访问的冷热性)那么这个时候我们进行搜索的时候就可以通过id的范围来进行分表查询了。

下边就是一个结合mybatis的查询案例了(一千万数据起步):

其实关于sql部分的查询内容基本如下所示:

在我们的sql设计部分里面,有一个table_index的设置,这个table_index设置可以通过相应的id来进行区分:

然后我开启dubbo服务之后,我们使用swagger远程调用这个rpc接口之后即

进行测试了:

相应的sql内容如下所示:

这样子的设计就能够较好地减轻对于数据表的压力了。

就可以关注我们啦~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180803G1Y0KJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券