分库分表之后,id 主键如何处理?

因为要是分成多个表之后,每个表都是从 1 开始累加,这样是不对的,我们需要一个全局唯一的 id
来支持。

1. 全局唯一 ID

在分库分表的架构中,需要确保每个分片中的主键 id 是全局唯一的,以避免数据冲突和重复。以下是几种常见的方法来实现全局唯一 ID:
1.1 自增 ID
方法: 每个分片(数据库或表)使用自增 ID 生成器。

优点: 实现简单,ID 有序递增。

缺点:

  • 需要确保不同分片之间的自增 ID 不会重复,可以通过设置不同的起始值和步长来解决,但管理复杂。
  • 不适合需要频繁拆分分片的场景。

示例:

  • 分片 1 起始值为 1,步长为 2:1, 3, 5, 7, …
  • 分片 2 起始值为 2,步长为 2:2, 4, 6, 8, …

1.2 UUID
方法: 使用 UUID 作为主键。

优点: 全局唯一,无需协调生成。

缺点:

  • UUID 比较长,存储空间占用较大。
  • UUID 无序,索引性能较差。

示例:

INSERT INTO table (id, ...) VALUES (UUID(), ...);

1.3 雪花算法(Snowflake)
方法: 使用分布式 ID 生成算法,如 Twitter 的雪花算法(Snowflake),生成全局唯一的有序 ID。

优点: 全局唯一,有序递增,高性能。

缺点: 需要实现分布式 ID 生成器。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值