分库分表
为什么要分库分表
分库分表的初衷大概率是数据量越来越多, 磁盘空间不足了,如果直接加磁盘, 随着数据越来越多, 因为服务器的内存限制, 导致mysql缓存的数据越来越少, 会消耗cpu, 并且会占用大量的磁盘IO

拆分策略
垂直拆分
- 将不用表的数据分别存储到不同的数据库
- 将一个大表拆分成多个不同的表
水平拆分
- 将同样表结构的数据分别存储到不同的数据库
- 将同样表结构的数据分别存储到不同的表
实现技术
最简单的方式是在代码里做判断, 比如按月分表, 按年分库, 每次请求在代码里判断时间字段, 应该访问哪个库哪个表
使用第三方中间件处理
- shardingJDBC:基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。需要自行编码配置实现,只支持 java语言,性能较高。
- MyCat:数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及前者。
mycat概述
Mycat是开源的、活跃的、基于Java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在。
下载安装mycat
mycats是用java编写的, 下载运行即可
https://blog.csdn.net/gitblog_09819/article/details/142974526
mycat结构
mycat本身不存数据, mycat存储了一些路由规则, 根据对应的规则路由到不同的数据库

实操
对一张表进行水平分表, 用mycat配置路由规则,分别存储到3台服务器数据库中

配置物理库和逻辑库的关系

配置数据分片规则
按照主键id的大小分别存储到不同的库
当然也可以根据某个字段的写一个自定义的分片规则