雪花算法使用中的一些问题及解决方案

您所在的位置:网站首页 分库分表会有什么问题 雪花算法使用中的一些问题及解决方案

雪花算法使用中的一些问题及解决方案

2023-07-20 05:35| 来源: 网络整理| 查看: 265

原因:代码中的时间戳虽然分配了41位,并且进行了左移,但是时间戳的十进制大小区别比较大,比如:

十进制1000 ,41位二进制表示为:00000000000000000000000000000001111101000

十进制1100000000000,41位二进制表示为:10000000000011101000110111111100000000000

由此可以看出,时间戳比较临近时,时间戳差值比较小。二进制即时都是41位,表示十进制的大小也是不一样的,雪花算法的64位二进制同理。

如何解决:

大佬的思路,请移步

在求证雪花算法最多生成的Id位数时,个人做的计算是:找生成19位Id的临界值。个人也就当玩一玩,极不推荐

雪花算法最大表示63位二进制为:111111111111111111111111111111111111111111111111111111111111111,十进制为9223372036854776000,不超过19位,可作为上边界;

计算下边界,先确定最小19位十进制数为1000000000000000000,转换成二进制00011011110000010110110101100111010011101 1001000000000000000000,但是后22位(机器标识码和序列号)处有1存在,万一机器标识码改变有可能导致十进制表示数变成18位。将后22位(机器标识码和序列号)全部置0为00011011110000010110110101100111010011101 1001000000000000000000,十进制表示为:999999999997640700为18位,但是将从右至左第24位置1,二进制表示为:00011011110000010110110101100111010011111 0000000000000000000000,即可表示19位十进制数1000000000006029300,并将此作为下边界。41位时间戳部分为:00011011110000010110110101100111010011111,转换为十进制为238418579103,也就是238418579103 ms ≈ 7.57年。与大佬算的基本一致。

结论,由此得出,设置的起始时间只要在当前时间7.57年前,生成的Id,永远都是19位。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3