当前位置: 首页 > 知识库问答 >
问题:

雪花算法,如果同一毫秒内有大量请求,是否会生成重复ID?

夏侯旻
2023-05-17

如题,我知道雪花算法主要的组成是时间戳(ms)+机器ID+序号,如果在同一毫秒内,有大量的几十亿的请求,导致序号超出最大值会怎么办呢?是归0还是时间戳+1呢?

共有2个答案

叶鸿
2023-05-17

在雪花算法中,生成的id由时间戳(毫秒级)、数据中心ID、机器ID和序列号组成。如果在同一毫秒内,同一个数据中心ID、同一台机器ID上生成的序列号超过了4096(序列号为12位,最大值为4095),那么会发生id重复的情况。

胡厉刚
2023-05-17

如果你指 Twitter 开源的那个,那么答案是不会。但有很多类似的实现方案,往往也都会被叫做雪花算法,因为我没有一一研究过,所以无法给你准确的答案。

超过了就会等待下一毫秒到来后再生成。

P.S. 你要非说十几亿请求同一毫秒到达、并且你只有一个每毫秒只能生成 4095 个 ID 的单节点再硬抗、还想阻塞时间尽可能短,那我只能说这方案就离谱。

 类似资料:
  • 如题,以下我网上找的通过雪花算法生成ID的类: 都说雪花算法生成的ID不会重复,但是如果在极端时间内(1ms以内)系统重启或者崩溃恢复,这里的sequence是不是会归0呢,如果归0那生成的两个ID是不是就重复了?虽然这个情况比较极端,但我感觉理论上是存在的,大家觉得呢?

  • 介绍 imi 框架的雪花算法生成组件 Github: https://github.com/imiphp/imi-snowflake Composer 本项目可以使用composer安装,遵循psr-4自动加载规则,在你的 composer.json 中加入下面的内容: { "require": { "imiphp/imi-snowflake": "~1.0" }

  • 我有以下数据模型: 我想执行以下选择: 因为我必须考虑性能,所以我想在一个选择中执行它,比如(伪): 不幸的是,它执行了这样的操作: 更新:SamiAl90建议的解决方案:此查询 产生以下sql:

  • 本文向大家介绍Java实现雪花算法(snowflake),包括了Java实现雪花算法(snowflake)的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍了Java实现雪花算法(snowflake),分享给大家,具体如下: 简单描述 最高位是符号位,始终为0,不可用。 41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。注意,41位时

  • 问题内容: 我正在编写一个赛车应用程序,想要将大量毫秒转换为minutes:seconds.milliseconds(例如)。目前,我只是通过数学()进行运算,然后求余数并进一步除法,依此类推,但是我发现它时不时关闭1毫秒。我知道这听起来似乎没什么大不了的,但是我试图找到和的平均值,然后返回,这意味着它输入不正确,而应用程序的其余部分无法处理。 有没有一种方法使用或格式化毫秒到MM或类似的东西:s