snowflake-64bit
- 1位,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0
- 41位,用来记录时间戳(毫秒),41位可以表示241-1个数字,也就是说41位可以表示241-1个毫秒的值,转化成单位年则是(2^41-1)/(1000606024365)=69年
- 10位,用来记录工作机器id。可以部署在210=1024个节点,包括5位datacenterId和5位workerId,5位(bit)可以表示的最大正整数是2^5-1=31,即可以用0、1、2、3、…31这32个数字,来表示不同的datacenterId或workerId
- 12位,序列号,用来记录同毫秒内产生的不同id。12位(bit)可以表示的最大正整数是212-1=4095,即可以用0、1、2、3、…4095这4096个数字,来表示同一机器同一时间截(毫秒)内产生的4096个ID序号
snowflake 优势:
- 能保证分布式场景下生成的ID是全局唯一的。
- 生成的全局ID整体上是呈自增趋势的,也就是说整体是粗略有序的。
- 高性能,能快速产生ID ,本机单线程可以达到每秒生成40万个ID。
- 只占64bit位空间,正好是一个long型的长度。