高效生成趋势有序的全局唯一ID,兼顾有序性、高性能、可扩展
SnowFlake原理:
- 64位的整型;
- 1位:标识部分;
- 41位:时间戳部分,这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值; 2^41 /年毫秒数=69年
- 10位:节点部分,前5位作为数据中心标识,后5位作为机器标识,可以部署1024个节点;根据实际情况设置;
- 12位:序列号部分,支持同一毫秒内同一个节点可以生成4096个ID;
- 生成的ID,可以通过转62进制,准换成字母数字的10位长字符串;
UUID:
- 可以在本地产生全局唯一的ID,但不能保证递增,不适合数据主键;
数据库自增主键:
- 可以保证递增。但是无法分库分表;
- 即使修改步长,进行分库,也不方便集群伸缩;