目录
1.什么是分库分表
简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。
分表:如果一个表的属性太多,可以拆分成多个表来分开存储属性
- 分库分表解决的问题
分库分表的目的是为了解决由于数据量过大而导致数据库性能降低的问题,将原来单体服务的数据库进行拆分。将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
- 什么情况下需要分库分表
1.单机存储容量遇到瓶颈
2.连接数,处理能力达到上限
注意:
分库分表之前,要根据项目的实际情况 确定我们的数据量是不是够大,并发量是不是够大,来决定是否分库分表。
数据量不够就不要分表,单表数据量超过1000万或100G的时候,速度就会变慢(官方测试)
2.分库分表的方式
分库分表包括:垂直分库分表和水平分库分表
2.1垂直分库
数据库中不同的表对应着不同的业务,垂直切分是指按照业务的不同将表进行分类,分不到不同的数据库上面。将数据库部署在不同服务器上,从而达到多个服务器共同分摊压力的效果。
2.2垂直分表
将一个表按照字段分成多张表,每个表存储其中一部分字段。例如:对职位表进行垂直拆分,将职位基本信息放在一张表,将职位描述信息存放在另一张表。
垂直拆分带来哪些提升?
1.解决业务层面的耦合,业务清晰
2.能对不同业务的数据进行分级管理、维护、监控、扩展等
3.高并发场景下,垂直分库一定程度的提高访问性能
4.垂直拆分没有彻底解决单表数据量过大的问题 (要进行水平分库)
2.3水平分库
- 将单张表的数据切分到不同的数据库中,每个数据库具有相同的库与表,只是表中的数据集合不同
- 简单讲就是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多提数据库(主机)上面,例如将订单表 按照id是奇数还是偶数,分别存储在不同库中。
2.4水平分表
针对数据量巨大的单张表(比如订单表),按照规则把一张表的数据切分到多张表里面去。但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈。
-
总结
- 垂直分表:将一个表按照字段分成多表,每个表存储其中一部分字段
- 垂直分库:根据表的业务不同,分别存放在不同的库中,这些库分别部署在不同服务器
- 水平分库:把一张表的数据按照一定规则,分配到不同的数据库,每一个库只有这张表的部分数据
- 水平分表:把一张表的数据按照一定规则,分配到同一个数据库的多张表中,每个表只有这个表的部分数据