横向分表:例如将创建时间在05年之前的数据放在一个分区上,将05年到08年之间的数据放到另一个分区上,以此类推。
到底要根据那个列进行横向的分区和查询有关系,在建表的时候需要分析,会根据那个列进行查询。
思路这样,具体事情具体分析。
分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,MYI索引文件,frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的子表名,然后去 *** 作它。
受群里小伙伴之邀,搞一个分库分表案例,这样让很多没用过分库分表的心里也有个底,不然永远看到的都是网上的各种概念和解决方案性的文章。
由于用户表过于庞大,采取相关SQL优化,还是不能满足,所以现对其进行做分库分表。
数据库: my-sharding
数据库表: t_user
建表语句如下:
关于数据库分库分表通常有两种方案:
下面我们来演示水平拆分,大致思路:
加入有2000万条数据,那么为了方便演示,我们就暂定分为五个库,每个数据库对应五个表。
五个数据库:
每个数据库有五张表:
建表语句如下:
使用技术栈: JDK8 + MySQL + Spring Boot + Mybatis + Shardingsphere + Druid
maven 相关依赖:
配置文件相关配置如下:
分库分表的两个分片类:
下面是业务部分代码,先看 UserMapperxml 内容:
UserMapper 接口:
为了更好地演示,我这里加入了 controller 层和 service 层,这也是大家平常开发套路。
service 层代码如下:
controller层代码如下:
最后是项目的启动类:
启动项目,启动成功:
下面我们来演示一下新增数据和查询。
先来添加数据到数据库中,这里使用的是IDEA中restful工具:
后台日志:
再查看数据库表中:
到此,我们的数据依旧落库,下面我们来演示一下数据查询。
浏览器里输入:
返回数据:
后台日志:
从日志和返回结果可以看出,已经为我们正确的选择到对应的数据库和表了,这样,一个分库分表的查询就成功了。
本文没有太多的概念,直接使用案例演示。相关概念性的文章,还有分库分表解决方案的文章,网上一堆堆的,感兴趣可以自行查阅。
以上就是关于mysql数据库分表全部的内容,包括:mysql数据库分表、什么是分表和分区 MySql数据库分区和分表方法、给小白演示 分库分表案例等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)