1、什么是切分
出于降低数据库负载和缩表的目的,通常我们要对单节点的MySQL数据库做切分。
切分方案有垂直切分和水平切分。
2、什么是垂直切分
垂直切分就是把数据表中的几个字段所在的列切出去,切到其他数据库和数据表。
这里垂直切分一般用于用户体量上来了,单节点架构转变为微服务架构时会用到。
比如原来商品表有商品名称、商品货号、库存数量等数据,切分之后,将库存数据踢出去,踢给专门的库存服务,之后商品详情获取库存数据时,通过接口来获取,而不再通过连表查询来获取。
微服务的第一步就是对当前系统做业务模块的拆分,然后进行数据库和数据表的拆分,每个子服务都有自己的数据库,不同子服务之间请求对方的数据,都是通过rpc、grpc、mq等形式,而不是直接连表查询其他服务的数据库获取数据。
3、微服务中的数据库垂直切分
4、垂直切分的优缺点
优点:
降低单机负载,提升高可用性和高并发性
缺点:
不能直接做表连接查询,只能通过接口方式获取或推送数据
跨节点的事务,需要用分布式事务机制来实现
5、什么是水平切分
水平切分是按照数据表中的某个字段的某种规则,把数据切分到多张数据表。
比如将用户表,按照取余9来切分,进而将用户表切分为user_1、user_2、user_3...
水平切分后的数据表可能还放在同一个数据库服务器,也可能放在不同的数据库服务器。
6、数据库中间件
数据库经过水平切分后,查询就变得很繁琐,数据库中间件应运而生,常见的数据库中间件有mycat、proxysql、MySQL Router等。
通过数据库中间件,可以很轻松地实现数据库路由和数据查询整合