数据库分库分表

垂直切分

垂直分库
1、读写分离(master-slave):主库写,从库读
2、拆库:基于微服务的理念,按业务模块划分数据库 ,如用户、订单、产品分别使用独立的库

优点:业务清晰,拆分规则明确;易于整合或扩展;易于维护

垂直分表
大表拆小表(拆列),拆表原则:高频率使用的字段放到同一张表,占用空间比较大的字段单独放一张表。热点数据放到缓存里(如memcache)

水平切分

水平分表
大表拆小表(拆行):
a).500W行是一个分水岭
b).拆为单表提高查询效率
c).合理的拆分规则可以避免不必要的业务处理复杂度
d).优点:降低单表数据量,在一定程度上缓解查询性能的瓶颈,但分表后仍然在同一个库里,仍然会出现IO瓶颈

水平分表分库
把拆分后的表分别放到独立的库里。
优点:
1、拆分规则复杂,但如果拆分规则合理,可以避免join表查询
2、不存在单库大数据表
3、提高稳定性和负载能力
缺点:
1、拆分规则复杂
2、分片事务一致性
3、数据库多次扩展难度大,维护比较难
4、跨库join表的问题

切分策略
1、hash取模分区
2、范围切分
3、按日期切分
4、查询切分:把id和库的对应关系单独记录到一个映射的库(表)

分库分表的问题
1、跨库join:不建议使用,一般不使用。对于分布式系统,使用节点提供服务,拆分成不同的接口,性能比跨库join高
2、跨库事务:保证高性能的前提下,不使用跨库事务,在业务逻辑上保证数据最终一致性
3、主键唯一:uuid/guid;snowflake算法;mongodb的objectid;zk….
4、多数据源:配置多数据源;代理层统一管理(常用,如mycat)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值