如题,我知道雪花算法主要的组成是时间戳(ms)+机器ID+序号,如果在同一毫秒内,有大量的几十亿的请求,导致序号超出最大值会怎么办呢?是归0还是时间戳+1呢?
如题,我知道雪花算法主要的组成是时间戳(ms)+机器ID+序号,如果在同一毫秒内,有大量的几十亿的请求,导致序号超出最大值会怎么办呢?是归0还是时间戳+1呢?
在雪花算法中,生成的id由时间戳(毫秒级)、数据中心ID、机器ID和序列号组成。如果在同一毫秒内,同一个数据中心ID、同一台机器ID上生成的序列号超过了4096(序列号为12位,最大值为4095),那么会发生id重复的情况。
如果你指 Twitter 开源的那个,那么答案是不会。但有很多类似的实现方案,往往也都会被叫做雪花算法,因为我没有一一研究过,所以无法给你准确的答案。
超过了就会等待下一毫秒到来后再生成。
P.S. 你要非说十几亿请求同一毫秒到达、并且你只有一个每毫秒只能生成 4095 个 ID 的单节点再硬抗、还想阻塞时间尽可能短,那我只能说这方案就离谱。