分库分表设计
2020-04-29 15:48:12 3 举报
AI智能生成
分库分表设计
作者其他创作
大纲/内容
背景
1、数据量大,读写性能下降,
即使有索引,索引也会变大,性能下降
2、数据库文件大,备份和恢复更耗时
3、数据文件越大,数据丢失风险越高
即使有索引,索引也会变大,性能下降
2、数据库文件大,备份和恢复更耗时
3、数据文件越大,数据丢失风险越高
分库分表的问题
Join
Count
Order by
Group by
分库分表之后,由于数据分散到多个表中,
上述操作,需要在业务代码或者数据库中间件中,
进行结果汇总合并的步骤
上述操作,需要在业务代码或者数据库中间件中,
进行结果汇总合并的步骤
业务分库
按照业务板块,拆分为独立系统
垂直分表
将大表中不常用的字段拆分到扩展表中
水平拆分
范围路由
说明:按照业务字段(比如创建时间、订单ID等),
分成各个小段(如1、2、3月份等),每段一个表
分成各个小段(如1、2、3月份等),每段一个表
优点:随着数据的增加,可以平滑扩容新表,原数据不需要移动
缺点:数据分布不均匀,而且热点数据较为集中
Hash取模路由
说明:按照业务字段(比如用户ID等),计算对应Hash值,
并按照分表总数取模,如%10分到10个表中
并按照分表总数取模,如%10分到10个表中
优点:使用Hash离散算法,数据分布相对均匀
缺点:扩容麻烦,比如10个表,增加为11个,所有数据需要重新分布;
成倍扩容时,增加为20个,基本一半的数据需要重新分布
成倍扩容时,增加为20个,基本一半的数据需要重新分布
一致性Hash路由
说明:Hash值0~2^32-1组成闭合圆,选取10个分割点,
将业务字段的Hash值按照一致性Hash算法分到这10个表中
将业务字段的Hash值按照一致性Hash算法分到这10个表中
优点:使用Hash离散算法,数据分布相对均匀
缺点:扩容相对麻烦,比如10个表,增加为11个,单点的数据需要迁移,其它点不动;
成倍扩容时,增加为20个,基本一半的数据需要重新分布
成倍扩容时,增加为20个,基本一半的数据需要重新分布
配置路由
说明:使用独立表记录路由信息,比如router表,
包含字段user_id和table_id
包含字段user_id和table_id
优点:配置灵活,扩容表的时候,只需要迁移指定数据,并修改配置路由表即可
缺点:业务查询需要多查询一次路由表,影响性能,有一定的单点瓶颈
0 条评论
下一页