Preamble
- 对RDB数据存储和访问机制的一种补充
- 针对海量请求的优化:优化sql/索引/字段;读写分离;分库分表
- rule of thumb: 单表行数 >500万行 或单表容量 >2GB 时,考虑分库分表
拆分方式
垂直拆分
- 垂直分库:按业务
- 垂直分表:按业务 / 按列
每个库/表的结构不同,但需要有一列相同用来关联;优点是逻辑清晰,数据维护简单;缺点是某个业务导致单表/库数据量大时,仍有读写压力,还需要考虑对事务的处理。
水平拆分
- 水平分库/表:取模等方式
每个库/表的结构相同,但数据不同;优点是单表/库的数据量保持在一定水平,保证了性能及稳定性;缺点是数据的再次扩展较难。
中间件方案
- 应用层依赖类:和应用强耦合,让应用层在基本不改变业务代码的情况下透明地实现分库分表的能力(在客户端就知道指定到那个数据库)。包括Sharding-jdbc等。
- 中间层代理类:在应用和数据库的连接间搭起一个代理层,应用以标准的MySQL协议来连接代理层,然后代理层负责转发请求到底层的MySQL物理实例。包括Cobar,Mycat等。