因为要是分成多个表之后,每个表都是从 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 生成器。