雪花算法生成id分析与实践

目录

1 什么是雪花算法?

结构

优点

缺点

2 在java中使用

使用注意: 

测试代码

效果


1 什么是雪花算法?

witter的雪花算法(Snowflake Algorithm)。雪花ID是一种分布式唯一ID生成算法,旨在解决分布式系统中生成唯一ID的需求。

结构

雪花ID的结构如下:

0 | 00000000000000000000000000000000000000 | 00000 | 00000 | 000000000000

- 第一位(最高位)是符号位,通常为0。

- 接下来的41位是时间戳,用于记录生成ID的时间。

- 然后是10位的工作机器ID,用于标识不同的机器。

- 一般来说工作机器ID分为工作节点ID和数据中心ID,各占5bit

 - 最后是12位的序列号,用于解决同一毫秒内生成多个ID的冲突问题。

通过这种结构,雪花ID可以在分布式系统中生成唯一的、有序的ID。

优点

高效、趋势递增、可排序,同时不依赖于外部数据库或网络。

缺点

雪花ID算法虽然在分布式系统中生成唯一ID的需求上有很多优点,但也存在一些潜在的缺点:

1. 依赖于机器时钟:雪花ID的时间戳部分依赖于生成ID的机器的系统时钟。如果机器的时钟发生回拨或不同步,可能会导致生成的ID不唯一或不正确。

2. 时钟回拨问题:如果机器的时钟回拨,可能会导致生成的ID比之前生成的ID要小。这可能会引发一些潜在的问题,例如在某些场景下无法正确排序或索引。

3. 高并发下的序列号重复:如果在同一毫秒内生成的ID请求非常高,可能会导致序列号部分不足以保证唯一性。这种情况下,需要额外的策略来解决并发生成ID的冲突。

4. 扩展性限制:雪花ID的结构中包含了工作机器ID和数据中心ID,这限制了系统的扩展性。如果需要增加机器或数据中心数量,可能需要重新分配ID范围或修改算法。

5. 需要单点生成ID:为了保证ID的唯一性,需要集中式的ID生成器来分配工作机器ID和数据中心ID。这可能成为系统的单点故障或性能瓶颈。

尽管雪花ID算法存在一些缺点,但在大多数情况下,它仍然是一种可行且广泛使用的分布式唯一ID生成方案。根据具体的应用场景和需求,可以考虑使用其他ID生成算法或采取额外的措施来解决这些缺点。

2 在java中使用

我们直接借助hutool工具包帮我们实现了雪花算法

依赖

        <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>


使用注意: 

工作机器ID分为工作节点ID和数据中心ID,各占5bit,所以workerID和datacenterId最大31

测试代码

    /** 测试 */public static void main(String[] args) {// workerID和datacenterId最大31Snowflake snowflake = IdUtil.getSnowflake(0, 31);for (int i = 0; i < 10; i++) {System.out.println(snowflake.nextId());}}

效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/96477.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vr健康管理服务情景化教学弥补现代医学教学中的诸多不足之处

高职高专临床医学院校以培养岗位胜任力为目的&#xff0c;该专业是一门专业性、实践性较强的医学学科&#xff0c;要求培养出来的学生具有较强的临床实践能力&#xff0c;医学生所学的全部知识&#xff0c;都应与实践相结合&#xff0c;解决临床的实际问题&#xff0c;为患者解…

2.3 Vector 动态数组(迭代器)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组&#xff08;模板语法&#xff09; 本文目标 1 熟悉迭代器设计模式&#xff1b; 2 实现数组的迭代器&#xff1b; 3 基于迭代器的容器遍历&#xff1b; 迭代器语法介绍 对迭…

JavaScript设计模式(四)——策略模式、代理模式、观察者模式

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

【计算机网络】HTTP

文章目录 1.HTTP概念2. URLurlencode 和 urldecode转义规则 3. HTTP的宏观理解HTTP的请求HTTP的响应 4. 见一见HTTP请求和响应请求报头 1. 模拟一个简单的响应response响应报头 2. 从路径中获取内容ReadFile函数的实现 3.不同资源进行区分反序列化的实现ReadOneLine函数的实现P…

JS三座大山 —— 原型和原型链

系列文章目录 内容链接2023前端面试笔记HTML52023前端面试笔记CSS3 文章目录 系列文章目录前言一、原型是什么&#xff1f;二、原型链是什么&#xff1f;2.1 原型链全方面解析2.2 为什么构造函数也有原型&#xff1f; 总结 前言 理解原型和原型链可以帮助我们更好地理解 Java…

一百六十七、MySQL——MySQL8.0连接jdbc报错(持续更新中)

一、目的 在编写海豚的部署脚本时&#xff0c;遇到MySQL的jdbc连接报错问题&#xff0c;发现这与hive部署里MySQL的jdbc连接也不同 二、MySQL版本 mysql> select version(); ----------- | version() | ----------- | 8.0.31 | ----------- 1 row in set (0.00 sec) …

QT基础教程之九Qt文件系统

QT基础教程之九Qt文件系统 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象&#xff0c;这些设备具有读写字节块的能力。下面是 I/O 设备的类图&#xff08;Qt5&#xff09;&#…

图表背后的故事:数据可视化的威力与影响

数据可视化现在在市场上重不重要&#xff1f;这已经不再是一个简单的问题&#xff0c;而是一个不可忽视的现实。随着信息时代的来临&#xff0c;数据已经成为企业和组织的核心资产&#xff0c;而数据可视化则成为释放数据价值的重要工具。 在当今竞争激烈的商业环境中&#xf…

[dasctf]misc04

与他不说一模一样吧也差不多 第三届红明谷杯CTF-【MISC】-阿尼亚_keepb1ue的博客-CSDN客flag.zip需要解压密码&#xff0c;在图片中发现一串密文。一串乱码&#xff0c;尝试进行字符编码爆破。获取到密码&#xff1a;简单的编码。https://blog.csdn.net/qq_36618918/article/d…

Aspose导出word使用记录

背景&#xff1a;Aspose系列的控件&#xff0c;功能实现都比较强大&#xff0c;可以实现多样化的报表设计及输出。 通过这次业务机会&#xff0c;锂宝碳审核中业务功需要实现Word文档表格的动态导出功能&#xff0c;因此学习了相关内容&#xff0c;在学习和参考了官方API文档的…

Python大数据处理利器之Pyspark详解

摘要&#xff1a; 在现代信息时代&#xff0c;数据是最宝贵的财富之一&#xff0c;如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架&#xff0c;为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…

采用ROUANT 方法对 nex-gddp-cmip6 数据进行精度校正

专题一 CMIP6中的模式比较计划 1.1 GCM介绍全球气候模型&#xff08;Global Climate Model, GCM&#xff09;&#xff0c;也被称为全球环流模型或全球大气模型&#xff0c;是一种用于模拟地球的气候系统的数值模型。这种模型使用一系列的数学公式来描述气候系统的主要组成部分…