一.雪花算法组成部分
雪花算法应用64位long类型的数据存储id
1.第一位占用1bit,其值始终是0,没有理论作用。
2.工夫戳占用41bit,准确到毫秒,总共能够包容约69年的工夫。
3.工作机器id占用10bit,其中高位5bit是数据中心ID,低位5bit是工作节点ID,做多能够包容1024个节点。
4.序列号占用12bit,每个节点每毫秒0开始一直累加,最多能够累加到4095,一共能够产生4096个ID。
二.雪花算法的实现
次要依赖于数据中心ID和数据节点ID两个参数
1.确定位数调配
2.工夫戳左移
3.机器ID左移
4.序列号
5.位或运算
留神:
1.工夫戳的递增性:每次生成ID时,须要确保工夫戳是递增的,以保障ID的全局唯一性。
2.时钟同步:因为雪花算法重大依赖服务器时钟,因而须要确保所有服务器的时钟是同步的,以防止产生反复的ID。
3.机器ID的唯一性:每台机器都应该有惟一的机器ID,以确保在同一时刻,不同的机器能够生成不同的ID。
三.雪花算法的长处:
1.能满足高并发分布式系统环境下ID不反复
2.基于工夫戳,能够保障根本有序递增
3.不依赖第三方的库或者中间件
4.生成效率极高
四.雪花算法的毛病
1.依赖零碎工夫:雪花算法生成ID的过程中依赖于零碎工夫,如果零碎时钟被回调或者扭转,可能会导致ID抵触或者反复。
2.时钟回拨问题:如果零碎时钟呈现回拨景象,即以后工夫戳小于上一次生成ID的工夫戳,雪花算法会抛出异样或生成反复的ID.
3.机器ID和数据中心ID的限度:雪花算法中,机器ID和数据中心ID的位数是固定的,别离占用5位。这意味着最多只能反对1024个节点(包含数据中心和工作节点的组合)。
4.ID长度和精度问题:雪花算法生成的ID是一个64位的long型数字。
留神:
在Web开发中须要跟js打交道,而js反对最大的整型范畴为53位,超过这个范畴就会失落精度,53之内能够间接由js读取,超过53位就须要转换成字符串能力保障js解决正确。