新零售-垂直切分与水平切分

1、什么是切分

出于降低数据库负载和缩表的目的,通常我们要对单节点的MySQL数据库做切分。

切分方案有垂直切分和水平切分。

2、什么是垂直切分

垂直切分就是把数据表中的几个字段所在的列切出去,切到其他数据库和数据表。

这里垂直切分一般用于用户体量上来了,单节点架构转变为微服务架构时会用到。

比如原来商品表有商品名称、商品货号、库存数量等数据,切分之后,将库存数据踢出去,踢给专门的库存服务,之后商品详情获取库存数据时,通过接口来获取,而不再通过连表查询来获取。

微服务的第一步就是对当前系统做业务模块的拆分,然后进行数据库和数据表的拆分,每个子服务都有自己的数据库,不同子服务之间请求对方的数据,都是通过rpc、grpc、mq等形式,而不是直接连表查询其他服务的数据库获取数据。

3、微服务中的数据库垂直切分

4、垂直切分的优缺点

优点:

降低单机负载,提升高可用性和高并发性

缺点:

不能直接做表连接查询,只能通过接口方式获取或推送数据

跨节点的事务,需要用分布式事务机制来实现

5、什么是水平切分

水平切分是按照数据表中的某个字段的某种规则,把数据切分到多张数据表。

比如将用户表,按照取余9来切分,进而将用户表切分为user_1、user_2、user_3...

水平切分后的数据表可能还放在同一个数据库服务器,也可能放在不同的数据库服务器。

6、数据库中间件

数据库经过水平切分后,查询就变得很繁琐,数据库中间件应运而生,常见的数据库中间件有mycat、proxysql、MySQL Router等。

通过数据库中间件,可以很轻松地实现数据库路由和数据查询整合

mycat 官网