随着业务请求的高并发,数据库压力变大,在不引入Nosql,更改系统架构的情况下,可以考虑分库分表分区
分表:
分表就是为了减少单个数据库表的压力,当单表数据量达到百万级别时候,无论是插入和查询对将面临瓶颈,访问变慢,引入分表也是为了减轻单表的压力,常见的分表策略
对于业务表或者用户表,可以根据业务ID或者用户ID 对表数取模、范围a~b等,以取模为例%n,将表分为n个,如tb_uesr0,tb_user1,tb_user2,tb_user3....
对于用作分析或者统计时候,例如日志表,可以根据日期分表,如tb_log20180101,tb_log20180102....
分区:
分区和分表大致相同,只是将单个数据表的数据分段存放在磁盘的不同区域,对外读写还是现实一张表,由DB去西东组织数据。
分库:
分表减轻的是单个数据表的数据量压力,而分库则是应对并发请求下面数据库服务器的访问压力。分库也可以选择对关键字取模的方式选择访问的数据库
存放DB= 关键字段%DB数
-------------------------------------------------------------------------------
常见的数据库分表分库中间件,sharding-jdbc,mycat 等。本文以 mycat 为例
mycat是根据分片字段、分片算法进行访问,解压mycat,可看到conf中的三个配置文件 (比较重要),可以在配置 文件中自己定义分片规则,使用mycat对数据库进行访问时候,mycat会对sql语句进行拆分和路由,以从真实数据库中获得数据或者访问。
(待扩充)