当前位置: 首页 > news >正文

雪花算法和uuid的区别

雪花算法(Snowflake Algorithm)和 UUID(Universally Unique Identifier)都是用于生成唯一标识符的方法,但它们在实现和适用场景上存在一些区别。

雪花算法:

雪花算法是Twitter开发的一种分布式ID生成算法。
雪花算法的核心思想是在分布式环境下生成递增的、趋势递增的、唯一的64位整数。
雪花算法的生成结果由以下几部分组成:一个时间戳、一个机器ID、一个数据中心ID和一个自增序列。
适用于分布式系统中生成全局唯一的主键ID,可以保证一定的顺序性。
UUID:

UUID是一种由标准化的算法生成的128位数字,通常表现为32个十六进制数字,以连字符分隔。
UUID的生成不依赖于分布式环境,可以在任何设备上生成。
UUID的生成结果几乎可以被认为是全局唯一的,但并不能保证绝对唯一。
适用于生成在分布式和非分布式环境中唯一标识的字符串。
对于生成主键ID,两种方式都可以使用,但根据不同的需求和环境选择更合适的方式:

如果你的系统是一个分布式系统,需要生成递增的、趋势递增的、保证顺序的主键ID,那么雪花算法是更合适的选择。它可以在分布式环境下生成全局唯一的ID,并且保证一定的顺序性。
如果你的系统是一个非分布式系统,或者对顺序性要求不高,只需要生成唯一标识的主键ID,那么UUID是更简单的选择。UUID可以在任何设备上生成,并且几乎可以被认为是全局唯一的。
对于生成文件名,通常建议使用UUID。因为文件名通常不需要保证顺序性,并且UUID生成简单,不依赖于分布式环境。使用UUID作为文件名可以很好地避免冲突和重复。

UUID

UUID总长度 36,由 32 个 16 进制字符和 4 个连字符组成。连字符仅用于增加可读性,实际的精度为一个 16 进制字符为 2^4=4bit,32 个则为 32*4bit=128bit。UUID具有多个版本,每个版本的算法不同,应用范围也不同。首先是一个特例--Nil UUID--通常我们不会用到它,它是由全为0的数字组成,如下:00000000-0000-0000-0000-000000000000

  1. UUID Version 1:基于时间的UUID
    基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址--Java的UUID往往是这样实现的(当然也考虑了获取MAC的难度)。
  2. UUID Version 2:DCE安全的UUID
    DCE(Distributed Computing Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID在实际中较少用到。
  3. UUID Version 3:基于名字的UUID(MD5)
    基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。
  4. UUID Version 4:随机UUID
    根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的,但狗屎运通常会在不经意中到来。
  5. UUID Version 5:基于名字的UUID(SHA1)
    和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。
UUID的应用

从UUID的不同版本可以看出,
Version 1/2适合应用于分布式计算环境下,具有高度的唯一性;v1同一台机器,不同服务之间会重复,v2同一台机器可以通过不同的域名使不同服务也不会重复。
Version 3/5适合于一定范围内名字唯一,且需要或可能会重复生成UUID的环境下;使用v5替换v3碰撞概率更低。
Version 4,个人的建议是最好不用(虽然它是最简单最方便的,随机数重复,uuid就会重复)。

雪花算法

原始雪花算法会有时间回拨问题,业界有各种解决方案,以下是解决方案,雪花算法链接,时间回拨也不会产生重复id

总结:

如果你想让你的数据按照时间排序,或者想要分批遍历大量数据的时候可以用雪花算法和自增id,如果是需要分布式则只能选择雪花算法,uuid无法像自增id和雪花算法一样按照时间排序和动态分批遍历

相关文章:

雪花算法和uuid的区别

雪花算法(Snowflake Algorithm)和 UUID(Universally Unique Identifier)都是用于生成唯一标识符的方法,但它们在实现和适用场景上存在一些区别。 雪花算法: 雪花算法是Twitter开发的一种分布式ID生成算法…...

docker之DockerFile与网络

目录 DockerFile 构建步骤 基础知识 指令 实战:构建自己的centos 第一步:编写dockerfile文件 第二步:构建镜像文件 docker网络 原理 功能 网络模式 host模式 container模式 none模式 bridge模式 DockerFile dockerfile 是用来…...

知识蒸馏开山之作(部分解读)—Distilling the Knowledge in a Neural Network

1、蒸馏温度T 正常的模型学习到的就是在正确的类别上得到最大的概率,但是不正确的分类上也会得到一些概率尽管有时这些概率很小,但是在这些不正确的分类中,有一些分类的可能性仍然是其他类别的很多倍。但是对这些非正确类别的预测概率也能反…...

centos 7 安装 docker-compose curl 设置代理

sudo curl -x “http://192.168.1.2:3128” 需要验证的代理 sudo curl -x “http://username:password192.168.1.2:3128” 1.下载 sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/lo…...

3D姿态相关的损失函数

loss_mpjpe: 计算预测3D关键点与真值之间的平均距离误差(MPJPE)。 loss_n_mpjpe: 计算去除尺度后预测3D关键点误差(N-MPJPE),评估结构误差。 loss_velocity: 计算3D关键点的速度/移动的误差,评估运动的平滑程度。 loss_limb_var: 计算肢体长度的方差,引导生成合理的肢体长度…...

ChatGPT取代人类仍然是空想?有没有一种可能是AI在迷惑人类

ChatGPT自从去年发布以来,就掀起了这些大语言模型将如何颠覆一切的激烈讨论,从为学生写作文、输出SEO文章,甚至取代谷歌成为世界上最受欢迎的搜索引擎,影响领域无所不包,甚至可能取代编剧、小说家和音乐家等从事创意工…...

基于swing的旅游管理系统java jsp旅行团信息mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的旅游管理系统 系统有1权限:管…...

Windows wsl2支持systemd

背景 很多Linux发行版都是使用systemd来管理程序进程,但是在WSL中默认是用init来管理进程的。 为了符合长久的使用习惯,且省去不必要的学习成本,就在WSL的发行版(我这里安装的是Ubuntu20.04)中支持systemd&#xff0…...

NLP - 如何解决ModuleNotFoundError: No module named ‘jieba‘的问题

错误描述 在JUPYTER中,使用结巴分词,出错: ModuleNotFoundError: No module named jieba解决方案 在 Anaconda Prompt 中,执行以下指令(可以解决): pip install jieba -i https://pypi.tuna…...

Windows10上VS2022单步调试FFmpeg 4.2源码

之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法,这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法:基于GitHub上ShiftMediaProject/FFmpeg项目,下面对编译过程进行说明…...

【tkinter 专栏】菜单组件

文章目录 前言本章内容导图1. Menu 菜单组件Menu 组件的基本使用制作二级下拉菜单为菜单添加快捷键2. Treeview 树形菜单组件Treeview 组件的基本使用菜单项的获取与编辑前言 本专栏将参考《Python GUI 设计 tkinter 从入门到实践》书籍(吉林大学出版社 ISBN: 9787569275001)…...

【LeetCode-经典面试150题-day10】

目录 242.有效的字母异位词 49.字母异位词分组 202.快乐数 219.存在重复元素Ⅱ 383.赎金信 205.同构字符串 290.单词规律 242.有效的字母异位词 题意: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和…...

Transformer在医学影像中的应用综述-分类

文章目录 COVID-19 Diagnosis黑盒模型可解释的模型 肿瘤分类黑盒模型可解释模型 视网膜疾病分类小结 总体结构 COVID-19 Diagnosis 黑盒模型 Point-of-Care Transformer(POCFormer):利用Linformer将自注意的空间和时间复杂度从二次型降低到线性型。POCFormer有200…...

新服务器基本环境下载conda + docker + docker-compose + git

文章目录 Ubuntu 允许root用户登录 centos无所谓condadockerubuntucentos docker-compose官方下载docker-compose国内镜像 gitUbuntuCentos Ubuntu 允许root用户登录 centos无所谓 # 以普通用户登录系统,创建root用户的密码 sudo passwd root# SSH 放行 sudo sed -…...

Matlab论文插图绘制模板第108期—特征渲染的标签散点图

在之前的文章中,分享了Matlab标签散点图的绘制模板: 进一步,再来分享一下特征渲染的标签散点图的绘制模板,以便再添加一个维度的信息。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中…...

设计模式之中介者模式(Mediator)的C++实现

1、中介者模式的提出 在软件组件开发过程中,如果存在多个对象,且这些对象之间存在的相互交互的情况不是一一对应的情况,这种功能组件间的对象引用关系比较复杂,耦合度较高。如果有一些新的需求变化,则不易扩展。中介者…...

css弹性布局的方式

概述 任何一个容器都可以定义为弹性布局容器,使用display:flex(display:inline-flex)开启弹性布局。 2个方向轴:水平主轴和垂直交叉轴 6个容器属性 1.flex-direction :主轴的方向 2.justify-content:子元素在主轴的对齐方式 …...

阿里云源 Python、npm、git、goproxy

阿里云源 Python、npm、git、goproxy 各种设置源的方式也都比较常见,但是根本记不住,每次都查感觉也不太好。 正好发现了个宝藏地址,看起来还挺全的,以后找源也可以先在这个地方翻翻,顺便就搞了几个放到一个脚本里边…...

微服务架构1.0

微服务架构 微服务架构是一种应用程序架构模式,将一个应用程序划分为一组小型、独立、自治的服务,每个服务专注于一个特定的业务功能。 每个微服务都可以独立开发、部署、扩展和维护,通过定义良好的接口和协议,它们可以相互通信…...

iOS开发Swift-基础部分

1.常量 let maxNum 10 //单个常量赋值 let maxNum 10, minNum 2 //多个常量赋值用逗号隔开2.变量 var x 0.0 //单个变量赋值 var x 0.0, y 0.1 //多个变量赋值用逗号隔开3.类型注解 系统可通过赋初始值进行自动推断。 var name&#…...

【LeetCode-经典面试150题-day11】

目录 128.最长连续序列 228.汇总区间 56.合并区间 57.插入区间 452.用最少数量的箭引爆气球 128.最长连续序列 题意: 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并…...

深度学习入门(三):卷积神经网络(CNN)

引入 给定一张图片,计算机需要模型判断图里的东西是什么? (car、truck、airplane、ship、horse) 一、卷积神经网络整体架构 CONV:卷积计算层,线性乘积求和RELU:激励层,激活函数P…...

网站是如何识别网络爬虫的?

在爬取数据时,你常常会遇到各种网站的反爬机制。网站是如何检测和拦截网络爬虫的呢?本文将为你揭秘网站使用的几种常见的反爬手段,并为你提供一些解决方案,助你越过反爬壁垒,提升你的实际操作效率。 一、Cookie检测 …...

TP-Link 智能灯泡缺陷能让黑客窃取用户 WiFi 密码

来自意大利和英国的研究人员在 TP-Link Tapo L530E 智能灯泡和 TP-Link Tapo 应用程序中发现了4个漏洞,攻击者可以利用这些漏洞窃取目标的 WiFi 密码。 TP-Link Tapo L530E 是包括亚马逊在内的多个市场上最畅销的智能灯泡。TP-link Tapo是一款智能设备管理应用程序…...

接口测试,如何测试?

一 入参 1 正常的入参 输入正常的参数,响应按照接口文档的约定正常返回。 2 异常的入参 参数异常包括:参数为空,多参或少参,错误的参数数据; 错误的参数数据:数据类型错误、非空参数为空,长…...

React源码解析18(11)------ 实现多次setState的批处理

摘要 在React中,如果涉及到了多次setState,组件render几次。setState是同步的还是异步的。这是一个很常见的面试题。 而本篇文章,就是主要实现React中,对于这部分的性能优化,我们称之为批处理。例如当我有下面的JSX。…...

评测凯迪仕K70「千里眼」智能锁:不忘安全初心,便捷体验更上一层

能打败凯迪仕的,只有它自己。这是我们在体验过凯迪仕最新旗舰产品K70「千里眼」智能锁之后的感受。作为凯迪仕2023年最新旗舰机型,K70「千里眼」智能锁在配置上可以说是「机皇」般的存在。3K超高清智能锁猫眼、车规级24GHz雷达、大小双屏设计、三方可视对…...

mysql数据库root密码遗忘后,修改root密码

目录 方式一: 方式二: 2.1 也可以像我这样,普通用户登录进去后 2.2 执行如下命令,将已知的user1的加密密文更新到root中 2.3 查询数据库 2.4 用root用户登录 2.5 登录正常,但这会root登录进去后,无法…...

网络安全(黑客)快速入门~

网络安全的学习需要遵守循序渐进,由浅入深。 通常网络安全学习方法有两种: 方法1:先学习编程,然后学习Web渗透及工具使用等; 适用人群:有一定的代码基础的小伙伴 基础部分 基础部分需要学习以下内容&am…...

华为OD机试 - 数字颠倒(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、Java算法源码投机取巧七、效果展示 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&am…...