首页 > 数据库 >雪花算法------用于生成数据库中的主键、消息队列的消息ID等的算法-----算法特点,id结构,生成过程,应用场景介绍

雪花算法------用于生成数据库中的主键、消息队列的消息ID等的算法-----算法特点,id结构,生成过程,应用场景介绍

时间:2024-10-17 17:45:53浏览次数:8  
标签:雪花 ID 毫秒 算法 序列号 生成 主键

雪花算法(Snowflake Algorithm)是一种由Twitter公司开发的分布式ID生成算法,用于在分布式系统中生成全局唯一的ID。这种算法非常适合需要高并发、低延迟以及大量唯一ID生成的应用场景,比如数据库中的主键、消息队列的消息ID等。

雪花算法的主要特点包括:

  1. 唯一性:生成的ID在全球范围内是唯一的。
  2. 有序性:生成的ID按时间顺序递增。
  3. 趋势递增:随着每秒的时间推移,生成的ID是递增的,这有助于提高某些数据库索引的效率。
  4. 不依赖于中心服务器:每个节点可以独立生成ID,不需要集中式的协调服务。
  5. 高性能:单机每秒可生成数百万个ID。

ID结构

一个标准的雪花ID是一个64位整数,其结构如下:

  • 符号位(1位):始终为0,因为ID总是正数。
  • 时间戳(41位):记录了从某个固定起始点(通常是自定义纪元,如Twitter使用的是2010-06-09 00:00:00 UTC)到当前时刻的毫秒数。这提供了大约69年左右的时间范围。
  • 机器标识符(10位):用来区分不同的物理机。可以通过数据中心和机器编号组合来实现。
  • 序列号(12位):同一毫秒内生成的不同ID之间的区别,支持每毫秒最多生成4096个不同的ID。

生成过程

  1. 获取当前时间戳:以毫秒为单位。
  2. 计算差值:将当前时间戳与初始时间戳相减得到时间差。
  3. 分配机器标识符:根据部署情况给定一个唯一的机器标识符。
  4. 生成序列号:在同一毫秒内,每次生成ID时增加序列号。
  5. 组装ID:将上述部分按照指定格式组装成最终的64位ID。

应用场景

  • 分布式数据库中的主键生成。
  • 消息队列中的消息ID。
  • 任何需要全局唯一且具有时间属性的ID的地方。

优点

  • 高可用性:去中心化设计减少了单点故障的风险。
  • 高性能:能够快速生成大量ID。
  • 易于扩展:新增机器只需简单配置即可加入集群。

缺点

  • 如果机器时钟回拨,可能会导致ID重复的问题。
  • 在某些极端情况下,如果一毫秒内的请求超过了最大序列号限制(4096),则需要等待下一毫秒才能继续生成ID。

雪花算法因其简单有效而在许多分布式系统中得到了广泛应用。如果你正在构建需要高效生成唯一ID的服务,考虑使用或参考雪花算法的设计思想是非常有价值的。

标签:雪花,ID,毫秒,算法,序列号,生成,主键
From: https://blog.csdn.net/Yluciud/article/details/143025067

相关文章

  • 17.Python基础篇-闭包、装饰器、迭代器、生成器
    函数的进阶—闭包闭包的定义:嵌套函数,内部函数调用外部函数的变量。满足这个条件就算闭包。闭包案例演示:defouter():a=1definner():print('inner函数中打印的变量a:',a)#嵌套函数中使用了外层函数的变量。此时满足了闭包的条件。returninner......
  • 算法
    1.常见算法点击查看代码*冒泡排序:重复数列,一次比较两个元素,如果顺序错误就交换*选择排序:每次选择未排序的部分最大或最小元素,放到已排序末尾*插入排序:将未排序的元素逐个插入到已排序部分的合适位置*快速排序:选择一个基准元素,将小于的放左边,大的放右边,再对左右递归进行......
  • 图论中的最小生成树算法
    错题考察的知识点是图论中的最小生成树算法,特别是Prim算法和Kruskal算法。这两种算法都是用来寻找无向连通图中的最小生成树的。最小生成树是指连接图中所有顶点的边的集合,且这些边的总权重最小,同时保证任意两个顶点之间都是连通的。Prim算法:原理:从一个任意顶点开始,逐步增加新......
  • Next.js 深度教程:服务端渲染、静态生成到增量静态再生 | 2024最新版
    优化字体和图像书接上回,我们学习了如何设计Next.js应用程序,让我们继续优化主页和添加自定义字体、图像。在网站设计中,字体扮演着关键角色,然而,若需获取并加载字体文件,项目中引入自定义字体可能对性能产生影响。Google采用累计布局偏移(CLS)作为评估网站性能和用户体验的指标。对......
  • 基于BP神经网络的CoSaMP信道估计算法matlab性能仿真,对比LS,OMP,MOMP,CoSaMP
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):   仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要        LS估计法实现方式较为简单,其估计过程没有考虑实际信道的噪声因素。因此,特别当毫米波MIMO信道干扰较大时,其估计性能较......
  • 常用手撕非算法题
    一.带定时器和锁的LRU缓存#include<iostream>#include<unordered_map>#include<chrono>#include<mutex>#include<thread>usingnamespacestd;classLRUCache{public:typedefstructNode{//双向链表节点intkey;//在哈希中的键值,用......
  • 代码随想录算法训练营第二天|209长度最小的子数组、59螺旋矩阵
    1leetcode209长度最小的子数组题目链接:209.长度最小的子数组文章链接:代码随想录(programmercarl.com)视频链接:拿下滑动窗口!|LeetCode209长度最小的子数组思路:没有思路,看到这道题有一种想立马退出的感觉,无从下手1.1暴力搜索1.1.1python版本这个版本的新知识就是定义......
  • JVM系列(九) -垃圾对象的回收算法介绍
    一、摘要在之前的文章中,我们介绍了JVM内部布局、对象的创建过程以及运行期的相关优化手段。今天通过这篇文章,我们一起来了解一下对象回收的判定方式以及垃圾对象的回收算法等相关知识。二、对象回收判定方式当一个对象被创建时,虚拟机会优先分配到堆空间中,当对象不再被......
  • 工装识别算法 工服穿戴检测系统
    工装识别算法工服穿戴检测系统特点包括:工装识别算法工服穿戴检测系统利用图像识别技术,系统可以准确地识别工人是否穿戴了正确的工装,包括工作服、安全帽等。一旦检测到未穿戴的情况,系统将立即发出警报,并提示相关人员进行整改。工装识别算法工服穿戴检测系统对于电力作业场景,系统......
  • ComfyUI-Flux-PuLID-定制写真生成工作流整合包,含提示词反推,相关软件包及工作流均已打
    本期本期带来基于PuLID-for-FLUX的ComfyUI定制写真工作流,通过一张面部参考图像生成真实感十足的高保真写真图像,基于Flux底层模型,更为写实。**其中包含“输入提示词生成图像”和“参考图像反推提示词生成图像”两套工作流,**工作流操作较简单,相关ComfyUI软件包、模型、节点、......