单库单表 拆分为 N个库N个表
分为垂直拆分,水平拆分
什么是垂直拆分
按结构(表头/约束)拆分
垂直拆库
把单库中的不同业务的表, 拆分到不同库中
比如 原本单库的 用户表, 订单表
将用户表相关的表放到同一个库中...A库
将订单相关的表放到同一个库中 B库
垂直拆表
把表中的多个字段, 拆出来部分字段放到另一个表中
比如
A库B表的一行, 有 1 2 3 4 5 列
把 1 2 3 4 列 拆出来放到 A库...将1w行, 按照id的奇偶分成两个库, 奇数插入到A库的b表, 偶数插入到C库的b表
(b表的结构是一样的)
就是按照id的内容进行了拆分
水平拆分的优点
提高查询性能, 单表超过2kw,性能下降..., 比如磁盘缓存, 控制变量, 两台相同实例的磁盘缓存比单台的实例的磁盘缓存要大, 命中缓存的比率会上升
水平拆分的缺点
实例增加, 成本增加
业务规则导致无法正确连表查询
分布式事务
sharding...数据倾斜问题
一致性hash算法 + 权重配置
看代码实现的思路
todo
读写分离特性问题探讨
查询优化
sharding-proxy代理分享
注意点
读写分离
没有事务时, 根据SQL去做读写分离