- 第一部分1bit:0没有任何意义(因为二进制里第一个bit如果为1,那么都是负数,但是我们生成的ID都是正数,所以第一个bit统一都是0);
- 第二部分41bit:表示时间戳(毫秒)(41bit可以表示的数字多达2^41 - 1,也就是可以标识2^41 - 1个毫秒值,换算成年就是表示69年的时间);
- 第三部分5bit:表示机房ID(最多可以代表2^5=32个机房);
- 第四部分5bit:表示机器ID(最多可以代表2^5=32台机器);
- 第五部分12bit:表示序号,就是某个机房某台机器上这一毫秒内同时生成的ID序号(可以代表的最大正整数为2^12 - 1=4096,也就是说可以用这个12bit代表的数字来区分同一个毫秒内的4096个不同的ID)。
SnowFlake算法优点
- 高性能高可用:生成时不依赖于数据库,完全在内存中生成;
- 容量大:每秒钟可以生成数百万的自增ID;
- ID自增:存入数据库中,索引效率高。
SnowFlake算法缺点
- 依赖与系统时间的一致性,如果系统时间被回调,或者改变,可能会造成ID冲突或重复。