数据库分库分表

垂直分库

根据业务对系统的表进行拆分形成不同的模块,为不同的模块分配不同的数据库

垂直分表

表的字段很多、存在大文本字段,在查询的时候对数据库的IO产生很大的影响,如果涉及到主从复制也会存在延迟的风险。
对当前表的列进行拆分,1、对经常使用的列和不经常使用的列进行拆分 2、大文本的列进行拆单独存储

水平分表

  • 单库水平分表(不推荐)
在同一个数据库中,按照相关策略把数据拆分存入到不同的表中,因为是在同一个数据库中,所以还是会存在数据库的IO性能问题,不建议在同一个数据库中进行分表操作
  • 多库水平分表
相比于单库的水平分表,更彻底
  • 水平分表策略
按照时间进行拆分(流水)
按照地域进行拆分
按照ID的大小进行拆分
按照分片键的HASH取模拆分(推荐使用,注意分片键使用查询频率最高的列)
选择用户的ID为分片键对用户的信息进行水平拆分,但是用户在登录的时候往往用的是账号进行登录,如果按照账号直接进行查询的话走所有的库进行扫描
新增一张中间表(用户的账号、用户的ID),以用户的账号为分片键进行拆分,先用账号从中间表中查询出ID,再用ID在用户表中查询出相关信息(以空间换时间)
用户购买商品生成订单,根据用户账号查询商品信息,根据商品编号查询所有用户信息。
分别新增中间表1(用户账号、商品编号),以用户账号为分片键进行拆分、中间表2(商品编号、用户账号),以商品编号进行拆分

水平分表带来的问题

  • 跨库JOIN问题:把相关关建字段冗余到表中。订单表中冗余用户账号、用户地市、商品编号、商品名称等等
  • 分组、排序问题
  • 分布式事务问题:seata分布式中间件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大能嘚吧嘚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值