在分库分表场景下,主键设计的核心目标是:全局唯一、趋势递增(可选)、不暴露业务信息、便于路由。下面按常见方案讲清楚。
AUTO_INCREMENT,会重复❌ 不推荐:单库自增 ID
结构(64位):
1bit(符号) | 41bit(时间戳) | 10bit(机器ID) | 12bit(序列号)
优点
缺点
workerId适用
✅ 最推荐
优点
适用
由 ID 生成服务 一次性取一段:
[1~1000] 给服务A
[1001~2000] 给服务B
优点
缺点
代表
AUTO_INCREMENT = 1, step = 10
❌ 扩展性差,已基本淘汰
⚠️ 主键 ≠ 分片键(sharding key)
常见组合:
snowflake_iduser_idorder_id = snowflake
分片规则 = user_id % 16
✅ 主键只保证唯一
✅ 分片键决定落在哪张表
| 场景 | 主键方案 |
|---|---|
| 高并发业务表 | 雪花算法 |
| 分布式系统 | Leaf / Tinyid |
| 日志类 | UUIDv7 |
| 强一致需求 | 号段模式 |
✅ 不要用自增
✅ 不要只靠 UUID
✅ 时钟问题要处理
✅ 主键和分片键分开设计
如果你愿意,我可以:
直接说业务场景就行。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。