uniapp 雪花算法封装类
1. uniapp 雪花算法封装类雪花算法(SnowFlake)生成64位整数ID,具有全局唯一、趋势递增、高性能等特点,适合分布式系统。1.1. 解决分布式全局唯一ID的方法1.1.1. UUIDUUID做全局ID的弊端:UUID是由数字加字母的形式组成,无法保持递增,它使得聚簇索引(主键值和行数据存放在一起)的插入变得完全随机,就会导致数据库无法快速写入。1.1.2. 雪花算法雪花算法他会生成一个64bit的递增的长整型数字,一般情况下第一位表示符号(+/-)前41bit表示时间戳,后10bit表示机器码,最后12bit表示序列号。(1)时间戳: 格林威治时间1970年1月1日 00:00:00至今 生成一个64bit的长整型数据,雪花算法取后41bit,可以表示69年。(2)机器码: 取其中10bit,可以表示1024个服务器。(3)序列号: 取左后的12bit,在同一个服务器同一毫秒内可以产生4096个序列号。位数含义范围/说明电脑$16001 bit符号位固定为0,确保ID为正数41 bit时间戳(毫秒)精确到毫秒,自定义起始时间(如2023-01-01),可使用约69年10 bit工作机器ID(含数据中心ID)区分不同节点,通常分为5位数据中心ID + 5位机器ID,范围0-102312 bit序列号同一毫秒内自增,解决高并发,范围0-4095,支持约4096个并发ID/毫秒1.1.3. 雪花算法雪花算法实现(1)先获取当前的时间戳,用当前的时间戳和前一个id生成时的时间戳作比较,如果相同说明是同一毫秒的ID,此时序列号加1,如果同一毫秒超过了4096,就要等下一毫秒。(2)将当前的时间戳左移()22位,机器码左移()12位,序列号不变。(3)将三个参数做位或(|)运算生成 64bit的长整型数字ID。1.1.4. 雪花算法总结(1)雪花算法的优点:根据时间递增,支持分布式部署。(2)雪花算法的缺点:严重依赖服务器的时钟,如果出现服务时钟回拨会导致ID重复。1.2. UniApp封装类实现1.2.1. 工具类代码(Snowflake.js)classSnowflake{constructor(workerId,dataCenterId){// 验证workerId和dataCenterId范围(0-31)if(workerId0||workerId31||!Number.isInteger(workerId)){thrownewError('workerId must be between 0 and 31');}if(dataCenterId0||dataCenterId31||!Number.isInteger
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2467706.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!