MySQL - 分库分表产生的问题&解决方案

本文探讨了MySQL分库分表的原因,包括业务拆分、应对高并发和数据隔离。介绍了分库分表策略,如哈希法和区域法,并详细讨论了分表后遇到的查询、Join和分布式事务问题。提出了映射表、业务双写、异步双写和双维度合一等解决方案,以及处理Join和分布式事务的方法。
摘要由CSDN通过智能技术生成

1. 为什么分

  1. 业务拆分,将一个大的业务拆分成多个小服务,服务之间通过RPC调用,不同服务的数据使用独立的数据库存储
  2. 应对高并发,读多写少,增加从库应对读流量,读少写多,分库分表,均衡写流量
  3. 数据隔离,C端数据和B端数据分隔,核心数据与非核心数据分隔,使其不要相互影响

2. 怎么分

在分库分表之前,数据库表的主键自增可以唯一标记一条记录,但是分库分表之后,无法使用数据库的id,因为可能造成全局的主键id重复冲突

常见的是采用一个分布式发号器实现,Twitter的Snowflake,美团的leaf等

 

在分库分表前,全局一张表,举个例子是订单表。order(id,userid,memchantId)有三个字段,订单ID,用户ID,商家ID

分库分表说的简单一些就是根据一套算法将原来单表中的数据均衡到多张表中

常见的分表算法有

  1. 区域法:根据id划分区域,例如:0-1000一个表,1001-2000一个表
  2. 哈希法:根据id哈希后取余数划分,例如:hash(id)%256==1,就存入第1号表中

互联网一般采用的是哈希法进行分库分表,因为数据更加均衡,但是不利于将来扩容迁移数据(区域法与之相反

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值