雪花算法生成ID【细糠】

news2024/9/28 3:27:44

目录

🧂1.ID生成规则

🥓2.UUID  

🌭3.数据库自增主键 

🍿4.雪花算法 


1.ID生成规则

  • 1. 全局唯一
  • 2.趋势递增
  • 3.单调递增
  • 4.信息安全
  • 5.含时间戳

2.UUID  

  • UUID(Universally Unique Identifier)的标准型式包含32个16进制数字,以连字号分为五段,形式为8-14-4-4-12的36个字符,eg:e9d24039-b6ff-4fee-b222-4b17b4ec330f
  • 优点:性能非常高;本地生成;没有网络消耗。
  • 缺点:无序,无法预测他的生成顺序,不能生成递增有序的数字。

 

3.数据库自增主键 

优点:数据库自动编号,速度快,而且是增量增长,顺序存放

缺点

  • 1.插入顺序:自增主键是按照顺序生成的,因此在高并发的插入场景下,可能会出现插入热点问题。多个并发事务同时插入数据时,由于插入的位置是固定的,可能会导致热点页的争用,进而影响插入性能。
  • 2.不适用于特定业务需求:在某些情况下,业务需求可能需要使用其他类型的全局唯一标识符(如UUID),或者需要将多个列组合作为复合主键。在这种情况下,自增主键可能无法满足特定的业务需求。
  • 3.数据迁移和跨数据库操作:在进行数据迁移或跨数据库操作时,自增主键可能会导致冲突或不一致的问题。因为不同数据库中的自增主键值可能冲突,需要额外的处理来确保数据的一致性。

4.雪花算法 

特点:

  • 1、生成ID能够按照时间有序生成
  • 2、生成一个64bit大小的整数,为一个Long型(转换成字符串后长度最多19)
  • 3、分布式系统内不会产生ID碰撞(由datacenter和workerld作区分)并且效率较高。

 

  • 1、1bit:不用,因为二进制中最高位是符号位,1表示负数,0表示正数。生成的id一般都是用整数,所以最高位固定为0。 
  • 2、41bit-时间戳,用来记录时间戳,毫秒级。
  • -41位可以表示2^{41}-1个数字,
  • -如果只用来表示正整数(计算机中正数包含0) ,可以表示的数值范围是: 0至24^{41}-1,减1是因为可表示的数值范围是从0开始算的,而不是1。
  • -也就是说41位可以表示2^41}-1个毫秒的值,转化成单位年则是(2^41)-1)/(1000* 60* 60*24 *365) = 69年 
  • 3、10bit-工作机器id,用来记录工作机器id。
  • 可以部署在2{10}= 1024个节点,包括5位dtacenterld和5位workerld
  • -5位(bit)可以表示的最大正整数是2^5)-1=31,即可以用0、1、2、3、...31这32个数字,来表示不同的datecenterld或workerld 
  • 4、 12bit-序列号,序列号,用来记录同毫秘内产生的不同id。
  • -12位(bit)可以表示的最大正整数是2N{12}-1=4095,即可以用0、1、2、3、 ....4094这4095个数字来表示同一机器同一时间截(毫秒)内产生的4095个ID序号。

注:雪花算法所有生成的id按时间趋势递增,整个分布式系统内不会产生重复id(因为有datacenterld和workerld来做区分)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UF_UI_select_with_single_dialog()通过单选对话框选择单个对象。对象可以通过光标或输入名称进行选择。对象被突显出来。

int response0;//返回用户操作类型,点了哪一种返回取消或者确定tag_t objtagNULL_TAG;//输出选择对象tag;double cursor[ 3 ];//输出光标位置tag_t view_tagNULL_TAG;//输出视图tag;UF_UI_select_with_single_dialog("请选择一个对象","获取对象类型…

前端echarts图形报表常见的样式配置

文章目录 🐒个人主页🏅Vue项目常用组件模板仓库📖前言:🐕1.深色主题🐕2.改变柱状图颜色🐕突然发现去问ai,更容易理解,那就不总结了 🐒个人主页 🏅…

浪花 - 用户加入队伍

一、接口设计 1. 请求参数:TeamJoinRequest package com.example.usercenter.model.request;import lombok.Data; import java.io.Serializable;/*** 加入队伍请求参数封装类*/ Data public class TeamJoinRequest implements Serializable {private static final…

计算机设计大赛 交通目标检测-行人车辆检测流量计数 - 计算机设计大赛

文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…

详细的程序员简历模板.pdf (附简历模板)

Q:什么是高水平的简历? A:满足HR需求的同时,最大化的体现自身价值的简历是高水平的简历 HR的需求是什么? ✅ HR想看到清晰专业的简历模板 ——家人们每天看几百份简历谁懂啊!花里胡哨真看不下去一点&…

Django框架二

一、模型层及ORM 1.模型层定义 负责跟数据库之间进行通信 2.Django配置mysql 安装mysqlclient,mysqlclient版本最好在13.13以上pip3 install mysqlclient 如果win安装报错,就去这两个网站中找 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient m…

基于springboot+vue的美容院管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

8 种网络协议

什么是网络协议? 网络协议就是计算机之间沟通的语言,为了有效地交流,计算机之间需要一种共同的规则或协议,就像我们和老外沟通之前,要先商量好用哪种语言,要么大家都说中文,要么大家都说英语&a…

HCIA——25FTP 的工作原理、功能、TFTP、控制连接、数据连接的选择、解答

学习目标: 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

应用案例:Ruff工业设备数据采集,为生产制造企业数字化转型赋能

导读:某金属材料生产制造企业,引进了整套Ruff数据采集方案,将Ruff网关采集到的PLC数据接入到Ruff IoT管理云平台,帮助客户实现覆盖全厂区、车间所有设备的数字化、可视化管理,避免了意外停机风险,IT运维工作…

QT实现 三个数的加减法自动生成

三位数加减法自动生成函数 输出一个txt文件,可以copy到word文档,打印回家训练娃的加减法 void MainWindow::test2(int answerMax, int count) {// 创建一个随机数生成器QRandomGenerator *generator QRandomGenerator::global();// 创建一个文件QStri…

ubuntu20安装网络调试助手遇到缺少qt4相关库的问题

最近需要做套接字通讯的工作,最好是有一个网络调试软件能够接受或者发送套接字,测试代码能够正常通讯。windows下有很多,但是linux下比较少,使用广泛的是下面这一款。 1、安装 首先从网盘(链接: https://pan.baidu.c…

What is `Filter` does?

过滤器(Filter)是Java Servlet规范中的一部分,它提供了一种在请求到达目标资源之前或响应发送给客户端之前进行预处理和后处理的能力。 通过编写自定义的过滤器类并将其注册到Web应用程序中,开发者可以实现诸如登录验证、权限控制…

整理了一下常用的LaTeX数学公式语法,未完待续

为了方便对应,后面会拆一下 公式代码放入LaTeX编译环境中时,两边需要加入$$: $$公式代码$$ 1,分解示例 L^{A}T_{E}X\,2_{\epsilon} c^{2}a^{2}b^{2} \tau\phi \cos2\pi1 f\, \,a^{x}\,\,b \heartsuit \cos^{2}\theta \sin^{2}\theta 1.0…

React16源码: React中的unwindWork的源码实现

unwindWork 1 )概述 在 renderRoot 的 throw Exception 里面, 对于被捕获到错误的组件进行了一些处理并且向上去寻找能够处理这些异常的组件,比如说 class component 里面具有getDerivedStateFromError 或者 componentDidCatch 这样的生命周期方法这个c…

macOS磁盘管理工具Paragon Hard Disk Manager,轻松且安全的改变磁盘分区

Paragon Hard Disk Manager mac版是Macos上一款磁盘管理工具,可以帮助你轻松而且安全的随意改变磁盘分区的大小和各种分区参数,作为mac磁盘分区工具也是游刃有余,同时在找回数据的时候也非常容易,并且不会损坏原来的数据&#xff…

tensorboard画图

安装 pip install tensorboardX还得安装TensorFlow pip install tensorflow使用 导包后往里面放数据就行,第一个参数是名称,第二个是y坐标,第三个是x坐标,通过add_scalar进行参数的添加。 import numpy as np from tensorboar…

GPSR路由算法的MATLAB实现

GPSR基于节点地理位置路由信息,采用贪婪策略和右手准则的结合在邻居节点中选择下一跳节点进行数据转发。节点在进行路由选择时,只需知道自己、邻居和目标节点的地理位置信息,无需维护全局网络的链路状态,这在很大程度上降低了网络…

VM下Unbunt虚拟机上网设置

系列文章目录 VM下Unbunt虚拟机上网设置 VM虚拟机上网设置 系列文章目录一、VM虚拟机上网设置 一、VM虚拟机上网设置 右击VM软件中你需要设置的虚拟机,选择设置 宿主机如果你用的是笔记本外加WIFI连接选择NAT网络模式 进入虚拟机看能否上网 不行的话,进…

全网最详细的Cortex-M0指令集汇总

文章目录 Thumb指令集Coretx-M0汇编语言格式寄存器访问指令:MOVEMOV Rd,#immed8.MOV Rd,RmMOVS Rd,#immed8MOVS Rd,RmMRS Rd,SpecialRegMSR SpecialReg,Rd 存储器访问指令:LOADLDR Rt,[Rn,Rm]LDRH Rt,[Rn,Rm]LDRB Rt,[Rn,Rm]LDR Rt,[Rn,#immed5]LDRH Rt,…