什么是数据分片?

简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。

数据切分有两种类型:垂直拆分与水平拆分。

垂直拆分:
1.表的垂直拆分:将一个表中的字段拆分到多个表中

分片数据库 索引有用码_数据库

拆分原则:

  1. 把不常用的字段单独放在一张表;
  2. 把text,blob等大字段拆分出来放在附表中;
  3. 经常组合查询的列放在一张表中;

缺点:
1.主表在数据量大且访问频繁的情况下可能还是满足不了要求
2.表的关联操作需要放在代码中实现
3.事务的处理更加复杂
4.拆分过度所带来的复杂性会令人头痛,拆分之前慎重且慎重

2.库的垂直拆分:按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上

分片数据库 索引有用码_数据_02

带来的提升: 解决业务层面的耦合,业务清晰 能对不同业务的数据进行分级管理、维护、监控、扩展等
高并发场景下,垂直分库一定程度的提升IO、数据库连接数、降低单机硬件资源的瓶颈
缺点: 并不能解决单表数据量过大的问题

水平拆分

1.表的水平拆分:在同一个数据库内,把同一个表的数据按一定规则拆到多个表中

分片数据库 索引有用码_数据库_03

目的:为解决单表数据量大的问题
优化单一表数据量过大而产生的性能问题 避免IO争抢并减少锁表的几率

2.库的水平拆分:把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上

分片数据库 索引有用码_数据库_04

解决了单库大数据,高并发的性能瓶颈。 提高了系统的稳定性及可用性
由于同一个表被分配在不同的数据库,需要额外进行数据操作的路由工作,因此大大提升了系统复杂度