1.分库分表特点
优点:
- 提升查询的效率
- 方便了表的扩展
缺点:
- 分表以什么切分如果弄的不好,导致多次查询,而且有时候要跨库操作,甚至导致join无法使用,对排序分组等有性能影响
- 之前的原子操作被拆分成多个操作,事务处理变得复杂
- 多个DB维护成本增加
2.分库分表常用的工具
- MyCat
- TDDL
- sharding-sphere
https://www.cnblogs.com/tellerfuliye/articles/13292076.html
3.MySQL达到什么量需要分库分表
单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
如果预计三年后的数据量根本达不到这个级别,请不要再创建表时就分库分表。
4.分库分表的方法
- 水平分库分表
以字段为依据,按照一定策略,将一个数据库表中数据拆分到多个数据库表中,每个表的结构一样。 - 垂直分库分表
以字段为依据,按照字段的重要性,将一个数据库表中的字段拆到不同的数据库表中,如:主表和扩展表,每一个的结构不一样。 - 二者区别:
1)水平分库分表的表结构是一样的,而垂直分库分表是不一样的;
2)水平分库分表没有数据交集,而垂直分库分表是有交集的(主键);
3)水平分库分表的数据条数为一条,而垂直分库分表是有多条;
5.水平分库分表的常用方案
- 范围法
范围规则是使用数据区间的方式进行划分。
优点: 扩容简单,提前建好库、表就好。
缺点: 大部分读和写都访会问新的数据,有IO瓶颈,这样子造成新库压力过大,不建议采用。 - 哈希法
哈希法则是使用主键取模的方式进行划分。
优点: 能保证数据较均匀的分散落在不同的库、表中,减轻了数据库压力
缺点: 扩容麻烦、迁移数据时每次都需要重新计算hash值分配到不同的库和表 - 一致性hash
在分布式微服务架构环境下建议使用一致性hash算法进行分库分表,通过虚拟节点方式能保证数据较均匀的分散落在不同的库、表中,并且新增、删除节点不影响其他节点的数据,高可用、容灾性强。
6.垂直分库分表的依据
- 主表:存储一些关键、核心的、内容较短、访问频率高的数据,比如:用户名、姓名、年龄、电话等…
- 扩展表:存储一些不重要的、内容较长、访问频率较低的数据,比如:用户的爱好、教育、备用地址等…
- 优点:
1)主表可以存储更多的数据,减轻主表的容量压力;
2)数据库缓冲池可以缓冲更多数据,提升查询效率;
3)按某种规则进行表拓展,方便信息的维护;