分库分表
时机
前提,项目业务数据越来越多,或者业务发展比较迅速(单表的数据量达1000W或10G以后)
优化已经解决不了性能问题(主从读写分离、查询索引…)
IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(聚合查询、连接数太多)
拆分策略
- 垂直
- 垂直分库
- 垂直分表
- 水平
- 水平分库
- 水平分表

垂直分库
以表为依据,根据业务将不同表拆分到不同库中

特点:
- 按业务对数据分级管理、维护、监控、扩展
- 在高并发下,提高磁盘IO和数据量连接数
垂直分表
以字段为依据,根据字段属性将不同字段拆分到不同表中。
特点:
- 冷热数据分离
- 减少IO过度争抢,两表互不影响

水平分库
将一个库的数据拆分到多个库中

特点:
- 解决了单库大数量,高并发的性能瓶颈问题
- 提高了系统的稳定性和可用性
那么一个Java应用如何知道是哪个库呢?
这时候就需要路由
- 根据ID结点取模
- 按ID范围路由,节点1(1-100W),节点2(100W-200W)
水平分表
将一个表的数据拆分到多个表中(可以在同一个库内)

特点:
- 优化单一表数据量过大而产生的性能问题
- 避免IO争抢并减少锁表的几率
新技术带来的新问题

中间件:mycat、sharding-sphere
分库分表
http://example.com/2023/09/07/分库分表/