❒ 分库分表的时机:
✔ 前提,项目业务数据逐渐增多,或业务发展比较迅速单表的数据量达1000W或20G以后。
✔ 优化已解决不了性能问题(主从读写分离、查询索引...)
✔ 10瓶颈(磁盘10、网络I0)、CPU瓶颈(聚合查询、连接数太多)
❒ 垂直分库:以表为依据,根据业务将不同表拆分到不同库中。如用户库:用户相关表,订单库:订单相关表,商品库:商品相关表
✔ 按业务对数据分级管理、维护、监控、扩展
✔ 在高并发下,提高磁盘I0和数据量连接数
❒ 垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中
拆分规则:
✔ 把不常用的字段单独放在一张表
✔ 把text,blob等大字段拆分出来放在附表中
垂直特点:
✔ 冷热数据分离
✔ 减少IO过渡争抢,两表互不影响
❒ 水平分库:将一个库的数据拆分到多个库中。路由规则
✔ 根据id节点取模
✔ 按id也就是范围路由,节点1(1-100万)节点2(100万-200万)
❒ 水平分表:将一个表的数据拆分到多个表中(可以在同一个库内)。
✔ 根据id节点取模
✔ 按id也就是范围路由,节点1(1-100万)节点2(100万-200万)
水平特点:
✔ 优化单一表数据量过大而产生的性能问题,
✔ 避免IO争抢并减少锁表的几率;
❒ 分库之后的问题:
✔ 分布式事务一致性问题
✔ 跨节点关联查询
✔ 跨节点分页、排序函数
✔ 主键避重
❒ 分库分表中间件:
✔ sharding-sphere
✔ mycat