上篇文章:分布式系统漫谈【拾壹】_分布式事务一致性:秒杀实现
本文来说说关于数据库分库分表。
分库分表
当系统数据库达到一定的量级,单数据库实例已经无法支撑的时候,我们就要考虑采用分库分表的策略了。如何理解这个名词?其实分库就是垂直拆分,按业务将数据拆分到不同数据库;分表就是水平拆分,将同一业务的数据拆到不同的表中(可能也位于不同数据库,但表结构是一样的)。
那么进行数据分库分表后会带来哪些影响呢?
垂直拆分的影响:
1.单机ACID打破了;
2.一些Join操作变得困难;
3.外键约束的场景受影响;
水平拆分的影响:
1.单机ACID打破了;
2.一些Join操作变得困难;
3.外键约束的场景受影响;
4.依赖单库的自增序列生成id受影响;
5.逻辑意义上的单表查询可能要跨库;
下面我们针对这些影响尝试进行整理解决。
多机Sequence问题
当进行了分表操作,同一个业务的数据被分散到多张表中,那么此时如何保证主键的唯一性?有如下几种策略:
1.UUID;
2.根据业务情况使用各种种子(IP、MAC、机器名、时间或本机计数器等)来生成唯一id;
3.指定一个数据库sequence生成,每个应用一次缓存一个批次的id,用完再取;
4.id服务器;

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

被折叠的 条评论
为什么被折叠?



