分库分表
分库分表的概念
分库分表类
垂直拆分
为什么要分库。
比如下面这个表,是在是太多了,那么就可以进行对表的拆分。
一般垂直拆分,都是根据业务进行拆分。
垂直分库
垂直分表
比如下面的表,用户表中,存有 用户
和 密码
这两项,那么每次登录的时候,都要查询这两项,其他的列查询的比较少,所以这个时候,我们就可以对 数据库
进行垂直拆分。
垂直拆分的特点
-
每个库(表)的结构都不一样
-
每个数据库(表)的数据(至少有一列)是一样的
-
每个库或者表的并集是全部数据
优点:
业务非常清晰,维护起来比较简单。
缺点:
- 如果单表的数据量比较大,那么读写的压力依然会很大。
- 一个业务可能会影响到数据库的瓶颈。比如双十一,所有的操作都会对订单操作,而很少对注册用户的数据库进行操作。
- 如果要查询,可能要使用到
join
,提高开发和查询的难度。
水平拆分
水平拆库
- 可以进行
取模
操作,确定数据应该放到哪个库里?
水平拆表
水平拆表最主要考虑的就是数据库的均衡性,比如两个表的数据,尽量的均衡,不要个表占 80%,另一个占 20%
比如认识统计的一个表,根据用户的性别进行划分,就能达到五五分的目的。
水平拆分的优缺点
水平拆分的特点
-
每个库(表)的结构都一样
-
每个库(表) 的数据都不一样
-
每个数据库(表) 的并集都是全量数据
优点
-
单库的数据量在减少,有助于性能的提升。
-
提高了系统的稳定性和负载能力。
-
拆分表的结构相同,程序改造少。
缺点
-
数据库扩容,难度很大。
-
拆分规则很难抽象出来。
-
部分业务无法关联,只能通过程序的接口去调用
分库的问题
-
分库的事务。
-
跨库的
Join
查询。 -
分布式的全局唯一
ID
。 -
开发成本高,程序员要求高。