分布式系统漫谈【拾贰】_分库分表带来的问题和解决方案

随着系统规模扩大,单数据库实例无法承载时,采用分库分表成为必要。垂直拆分按业务切分数据库,水平拆分将数据分散到多表。但这会打破ACID特性,增加Join难度,影响外键约束和自增序列。解决策略包括:多机Sequence管理,如ID服务器;跨库查询可通过中间件支持;跨库JOIN则需异构索引或全量信息保存;多维度搜索建议使用全文搜索引擎。精卫中间件用于数据异构复制,确保任务调度和异常处理。
摘要由CSDN通过智能技术生成

 

上篇文章:分布式系统漫谈【拾壹】_分布式事务一致性:秒杀实现

 

本文来说说关于数据库分库分表。

 

分库分表

 

当系统数据库达到一定的量级,单数据库实例已经无法支撑的时候,我们就要考虑采用分库分表的策略了。如何理解这个名词?其实分库就是垂直拆分,按业务将数据拆分到不同数据库;分表就是水平拆分,将同一业务的数据拆到不同的表中(可能也位于不同数据库,但表结构是一样的)。

 

那么进行数据分库分表后会带来哪些影响呢?

 

垂直拆分的影响:
1.单机ACID打破了;
2.一些Join操作变得困难;
3.外键约束的场景受影响;

水平拆分的影响:
1.单机ACID打破了;
2.一些Join操作变得困难;
3.外键约束的场景受影响;
4.依赖单库的自增序列生成id受影响;
5.逻辑意义上的单表查询可能要跨库;

下面我们针对这些影响尝试进行整理解决。

 

多机Sequence问题

 

当进行了分表操作,同一个业务的数据被分散到多张表中,那么此时如何保证主键的唯一性?有如下几种策略:

 

1.UUID;

 

2.根据业务情

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值