全局ID的实现方式
-
UUID,32个字符, 4个横线
8 - 4-4-4- 12
UUID.randomUUID.toString();
- 基于时间的UUID(time & MAC)
- UUID(time&POSIX UID或GID)
- 随机数的UUID
- UUID(SHA1)
-
数据库
create table sequence(
id int auto_increment
b_id int unique_key
);
begin
replace into sequence(b_id) values();
select LAST_INSERT_ID();
commit;
- Redis、mongdb
increBy / incr
ObjectId
全局ID的要求
- 全局唯一性
- 有序的递增性
- 高可用性
- 时间上的特性
-1l ^ (-1l << sequenceBits)
00000000 00000000 00000000 00000001
取反+1
11111111 11111111 11111111 11111111
11111111 1111 11111111 11111111 11110000 00000000 (-1l << sequenceBits)
11111111 11111111 11111111 11111111
00000000 00000000 00001111 11111111
4095
雪花算法
Leaf-segment
Leaf-snowflake
UIDGenerator
- snowflake算法(改造版本)