一.什么时候分库分表?

能不分库分表是尽量不要分,如果单表数据超过500万条可以开始考虑分库分表.因为分库分表比较营销sql执行效率,本来一张表可以查询完的,查多张表,一个数据库能查完的,查多个数据库.

二.主从数据库

1.什么是主从数据库?

由于我们业务的不断扩张,导致单库访问压力非常大,所以我们使用了读写分离的技术,设置主库新增/修改,从库查询等操作.从而提高数据库访问性能.

2.主从数据库的原理

主从数据库的原理是,我们应用程序新增/修改数据通过主库,从库通过读取主库的日志文件,也就是binlog文件,更新从库的数据.我们查询就直接通过查询从库就行了,这样分担了主库的压力,提高了数据库并发能力.

MySQL的主从复制解决了数据库的读写分离,并很好的提升了读的性能,其图如下:

java sass 分库分表方案 java分库分表原理_分库分表


其主从复制的过程如下图所示:

java sass 分库分表方案 java分库分表原理_java sass 分库分表方案_02

但是,主从复制也带来其他一系列性能瓶颈问题:

写入无法扩展
写入无法缓存
复制延时
锁表率上升
表变大,缓存率下降

3.步骤

主库
1)修改配置文件(linux: /etc/my.cof文件;windows是my.ini文件),开启日志,配置同步数据库.
2)重启mysql服务.
3)配置连接本库的从库的账号和密码权限等
4)查看状态;
从库
5)修改配置文件(linux: /etc/my.cof文件;windows是my.ini文件),开启日志,配置同步数据库.
6)重启mysql服务.
7)连接到主库,通过第三步设置的用户和密码,连接到主库
8)启动从库服务,也就是start slave.
9)查看状态.

三.数据库分库

1.水平拆分
水平拆分的意思是一张表中有很多条数据,把它这些数据拆分到不同的表或者库中去.
例如:DB1中有一张user表有600万条数据,我们则可以将他拆分到3个数据库的3张表去,每张存200万条,我们可以按照id拆分,时间拆分等等.

实现:通常使用中间件实现的,例如mycat,sharding-jdbc
2.垂直拆分
垂直拆分分为两种,第一种把一个数据库中的表分别按照功能拆分到其他库中去;第二种如果一张表的字段太多了,很多字段不常用,则可以将这个表的字段拆分成几个表;
实现:垂直拆分的实现通常是在微服务架构下,大服务拆小服务,每个服务连接自己的数据库.

3.数据库分库分表的实现方式
现在市面上常用的分库分表有mycat,sharding-JDBC等,

四.mycat
mycat数据库中间件,就是代替我们连接数据库的中间人,有点类似于nginx是帮我们连接服务器的中间人一样的,生活中的中间人一样.

原理

java sass 分库分表方案 java分库分表原理_分库分表_03


主要配置文件

1.server 配置mycat属性

2.schema 配置的是节点

3.rule 配置的是节点规则

具体,略.