首先雪花算法就是生成一个64位的二进制数据,最终转换成长度为19的十进制正整数整型数据
0 0000000000 0000000000 0000000000 0000000000 0 00000 00000 000000000000
解释一下这64位分别代表什么意思,从左往右。
符号位
:第1个,也就是最高位0毫无疑问代表符号位(0代表正数,1代表负数),在这个场景中不需要负数,所以最高位恒为0,也就解释了为啥长度是19了。时间戳位
:从第2个到第42个这中间的41位是雪花算法最核心的东西了,它代表41位的时间戳,这个时间戳并非实际意义上的时间戳,他是当前时间戳减去一个时间戳常量(开始生成唯一ID的时间戳)的差值,所以他是从0开始的,能够取到的最大时间范围就是2的41次方(即1L<<41
),换算成年的话也就是约等于69.73年。换句话说也就是在生成ID的那一刻起到69.73之间生成的ID绝对是唯一的(前提是各个机器的时间一致),在此之后生成的ID有几率碰撞(总是不知不觉中写bug</坏笑>)机器位
:从第43到53这10位是机器位,此ID也能适用于分布式系统中,前五位是数据中心为,后五位是机器标识,能够产生1024个数据节点。序列号位
:最后12位是序列号,作为支持并发处理。在一个数据中心的一个机器中一个毫秒单位内能够产生4096个不同的串号。
据说:snowflake每秒能够产生26万个ID,由此可见此算法还是十分强大的。