雪花算法(Snowflake)生成的ID是一个64位的整数,结构如下:
+-----------------------------+
| 42 bits |
| 1 bit | 0 | 1
+-----------------------------+
| 10 bits |
| 11 bits | 0 | 1 | 0 | 1
+-----------------------------+
| 12 bits |
| 13 bits | 0 | 1 | 0 | 1 | 0 | 1
+-----------------------------+
| 4 bits |
| 14 bits |
+-----------------------------+
各部分的意义如下:
- 42位时间戳:记录生成ID的时间戳,精确到毫秒,可以使用约69年。
- 10位机器标识:可以部署在1024个节点上。
- 12位序列号:在同一毫秒内,同一个节点可以生成的不同ID数,最多可以支持4096个ID。
- 4位工作机器标识:用于标识不同的工作机器,最多可以部署16台机器。
雪花算法生成的ID是一个趋势递增的数字,可以按照时间顺序进行排序。***由于ID是趋势递增的,因此可以避免在数据库层面进行唯一性约束,降低锁竞争,提高性能。