最近项目从Mysql数据库换成了PostgressSQL导致以前用的很舒服的id自增不能用了,pgsql想自增还要创建序列比较麻烦,所以换成了UUID和雪花算法,因此遇到long类型id传递失真。
雪花算法生成的分布式ID长度为19位,前端JS接收数字能够达到的最大精度为16位,因此导致前端得到的ID不是真正的ID。
1、UUID
优点:对于所有的UUID它可以保证在时间和空间上的唯一性,它通过MAC地址,时间戳,命名空间,随机数,伪随机数来保证生成ID的唯一性,有着固定的大小(128bit)。它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID。
缺点:UUID无序,且UUID在意外情况下(mac地址等其他生成UUID的因素相同的情况)可能会出现UUID相同,且存在隐私安全问题(mac地址)。
2、雪花算法SnowFlake
算法结构:符号位+时间戳+工作进程位+序列号位,一个64bit的整数,8字节,正好为一个long类型数据。
优点:所有生成的id按时间趋势递增,整个分布式系统内不会产生重复id。
缺点<