分库分表后主键怎么生成?高并发下 ID 生成会不会成瓶颈?多机房怎么避免冲突?从 UUID 到雪花算法到号段模式,一篇讲透。
一、为什么需要分布式 ID
1.1 单库自增 ID 的问题
单库:AUTO_INCREMENT → 简单好用
分库分表后:
DB1: id = 1, 2, 3, ...
DB2: id = 1, 2, 3, ... → 冲突!
解决方法 1:步长设置
DB1: 1, 3, 5, 7, ...(步长=2,起始=1)
DB2: 2, 4, 6, 8, ...(步长=2,起始=2)
问题:扩容困难,不能加机器
解决方法 2:独立 ID 生成服务
→ 分布式 ID 方案