mysql分库分表

数据库拆分策略与挑战

1.为什么要分库分表

当mysql中表较多,表字段较多,单表的数据量较大的时候会降低mysql系统的性能,mysql建议单表的数量保持在500-1000W之间,超过1000万会影响mysql系统的性能。

2.数据库的拆分方式

2.1垂直拆分
垂直分库:将1个库中的表分开两个库存储;解决单库表较多的问题
垂直分表:将一个表的字段拆分到两个表存储;解决单表字段较多的问题
2.2水平拆分
将大数据表拆分成小表;解决单表数据量较大的问题

3.拆分策略

垂直拆分:
根据领域模型拆分,如将用户表存储在一个数据库中,订单表存储一个库中
水平拆分:
一致性hash 如对id hash取模,如果集群中增加会减少节点会涉及到节点的数据迁移的问题。
范围拆分 例如按照id的范围拆分。
日期拆分 如对订单表1个月存储在一个表中。

4.拆分带来的问题

4.1 跨库的join的问题
1.在设计的时候考虑到应用层的join问题
2.在应用层去做调用 如select u.,o. from user u left join order o on u.id=o.user_id;
可以先查询user的id,之后通过userId查询的订单
3.全集表 如数据字典表可以在每个数据库节点都存储一份
4.字段的冗余;如可以把用户名字可以在表中冗余一份(空间换时间的算法)
4.2 跨库的数据排序和分页问题
4.3 唯一主键问题;拆分之前表的主键是自增的,拆分之后会导致id重复的问题。
1.uuid 此方式性能较低,因为uuid较长会降低索引的性能。
2.snowflake
3.mongodb
4.redis incyby
4.4 分布式事物问题
多个数据库节点的数据一致性问题,一般用强一致性分布式事物的比较少,用最终一致性的较多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值