特好用!!!8种分布式ID生成方法

下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析) 下载MNIST数据集并使用python将数据转换成NumPy数组首先来分析init_mnist函数接下来继续分析load_mnist函数实现数据集转换的python脚本的代码显示MNIST图像并确认数据 下载MNIST数据集并将数据转换成NumPy数组的Python脚本里面最重要的就是load_mnist函数,其他项目想要调用数据集的话,就可以调用load_mnist函数,得到一个字典类型的数据,字典的值是一个Numpy数组。 这些过程是如何实现的,现在开始逐字逐句分析源码: 在load_mnist函数中第 阅读详情

前言

业务量小于500W或数据容量小于2G的时候单独一个mysql即可提供服务,再大点的时候就进行读写分离也可以应付过来。但当主从同步也扛不住的时候就需要分表分库了,但分库分表后需要有一个唯一ID来标识一条数据,且这个唯一ID还必须有规则,能辅助我们解决分库分表的一些问题。

数据库的自增ID显然不能满足需求;特别一点的如订单、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的,那么这个全局唯一ID就叫分布式ID。

分布式ID需满足那些条件

  • 全局唯一:基本要求就是必须保证ID是全局性唯一的。
  • 高性能:高可用低延时,ID生成响应要快。
  • 高可用:无限接近于100%的可用性
  • 好接入:遵循拿来主义原则,在系统设计和实现上要尽可能的简单
  • 趋势递增:最好趋势递增,这个要求就得看具体业务场景了,一般不严格要求

UUID

UUID 是指Universally Unique Identifier,翻译为中文是通用唯一识别码,UUID 的目的是让分布式系统中的所有元素都能有唯一的识别信息。形式为 8-4-4-4-12,总共有 36个字符。用起来非常简单

public static void main(String[] args) {
  String uuid = UUID.randomUUID().toString().replaceAll("-","");
  System.out.println(uuid);
}

输出结果 99a7d0925b294a53b2f4db9d5a3fb798,但UUID却并不适用于实际的业务需求。订单号用UUID这样的字符串没有丝毫的意义,看不出和订单相关的有用信息;而对于数据库来说用作业务主键ID,它不仅是太长还是字符串,存储性能差查询也很耗时,所以不推荐用作分布式ID。

优点: 生成足够简单,本地生成无网络消耗,具有唯一性

缺点: 无序的字符串,不具备趋势自增特性,没有具体的业务含义。如此长的字符串当MySQL主键并非明智选择。

数据库自增ID

基于数据库的auto_increment自增ID完全可以充当分布式ID,具体实现:需要一个单独的MySQL实例用来生成ID,建表结构如下:

CREATE TABLE SoWhat_ID (
    `id` bigint(20) unsigned NOT NULL auto_increment, 
    `value` char(10) NOT NULL default '',
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
) ENGINE=MyISAM;

当我们需要一个ID的时候,向表中插入一条记录返回主键ID,但这种方式有一个比较致命的缺点,访问量激增时MySQL本身就是系统的瓶颈,用它来实现分布式服务风险比较大,不推荐!

优点 : 实现简单,ID单调自增,数值类型查询速度快

缺点: DB单点存在宕机风险,无法扛住高并发场景

数据库集群模式

前面说了单点数据库方式不可取,那对上边的方式做一些高可用优化,换成主从模式集群。害怕一个主节点挂掉没法用,那就做双主模式集群,也就是两个Mysql实例都能单独的生产自增ID。那这样还会有个问题,两个MySQL实例的自增ID都从1开始,会生成重复的ID怎么办?解决方案:设置起始值和自增步长

MySQL_1 配置:

set @@auto_increment_offset = 1;     -- 起始值
set @@auto_increment_increment = 2;  -- 步长

MySQL_2 配置:

set @@auto_increment_offset = 2;     -- 起始值
set @@auto_increment_increment = 2;  -- 步长 

这样两个MySQL实例的自增ID分别就是:

1、3、5、7、9 
2、4、6、8、10

但是如果两个还是无法满足咋办,需要进行扩容呢?

增加第三台MySQL实例需要人工修改一、二两台MySQL实例的起始值和步长,把第三台机器的ID起始生成位置设定在比现有最大自增ID的位置远一些,但必须在一、二两台MySQL实例ID还没有增长到第三台MySQL实例的起始ID值的时候,否则自增ID就要出现重复了,必要时可能还需要停机修改。

优点: 解决DB单点问题

缺点: 不利于后续扩容,而且实际上单个数据库自身压力还是大,依旧无法满足高并发场景。

Redis模式

Redis 也同样可以实现,原理就是Redis 是单线程的,因此我们可以利用redis的incr命令实现ID的原子性自增。

127.0.0.1:6379> set seq_id 1     // 初始化自增ID为1
OK
127.0.0.1:6379> incr seq_id      // 增加1,并返回递增后的数值
(integer) 2

实现思路,大致和上面讲数据库的原理类似。用redis实现需要注意一点,要考虑到redis持久化的问题。redis有两种持久化方式RDB和AOF。

号段模式

号段模式是当下分布式ID生成器的主流实现方式之一,号段模式可以理解为从数据库(当然这边存储层也可用其他的,比如redis、Mongdb等)批量的获取自增ID,每次从数据库取出一个号段范围,例如 (1,1000] 代表1000个ID,具体的业务服务将本号段,生成1~1000的自增ID并加载到内存。表结构如下:

CREATE TABLE id_generator (
  `id` int(10) NOT NULL,
  `max_id` bigint(20) NOT NULL COMMENT '当前最大id',
  `step` int(20) NOT NULL COMMENT '号段的步长',
  `biz_type`    int(20) NOT NULL COMMENT '业务类型',
  `version` int(20) NOT NULL COMMENT '版本号',
  PRIMARY KEY (`id`)
)
  • max_id :当前最大的可用id
  • step :代表号段的长度
  • biz_type :代表不同业务类型
  • version :是一个乐观锁,每次都更新version,保证并发时数据的正确性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3xxRDI9v-1611622902694)(https://static01.imgkr.com/temp/5ddbe589d4df4be8b39e9efae32ba2a8.png)]

等这批号段ID用完,再次向数据库申请新号段,对max_id字段做一次update操作

update max_id= max_id + step

update成功则说明新号段获取成功,新的号段范围是(max_id ,max_id +step]。

由于多业务端可能同时操作,所以采用版本号 version 乐观锁方式更新。

优点: 这种分布式ID生成方式不强依赖于数据库,不会频繁的访问数据库,对数据库的压力小很多

缺点: 如果遇到了双十一或者秒杀类似的活动还是会对数据库有比较高的访问,且如果再申请新号段的时候,遇到数据库不可用时,ID生成也会出现问题。

雪花算法模式

SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,为什么叫雪花算法呢?众所周知世界上没有一对相同的雪花。雪花算法基本上保持自增的。

在这里插入图片描述

这 64 个 bit 中,其中1个bit是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。举例如上图:

  1. 第一个部分是1个bit:0,这个是无意义的。因为二进制里第一个 bit 位如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。

  2. 第二个部分是41个bit:表示的是时间戳。单位是毫秒。41 bit 可以表示的数字多达 2^41 - 1,也就是可以标识 2 ^ 41 - 1 个毫秒值,换算成年就是表示 69 年的时间。

  3. 第三个部分是10个bit: 5个bit代表机房,意思就是最多代表25个机房(32个机房)。另5个bit代表机器id,意思就是每个机房里可以代表25个机器(32台机器)

  4. 第四个部分是12个bit:表示自增序号,就是某个机房某台机器上这一毫秒内同时生成的 id 的序号。12bit可以代表的最大正整数是2^12-1=4096,也就是说可以用这个12bit代表的数字来区分同一个毫秒内的4096个不同的id。

总结的来说,就是用一个 64 bit位来设置不同的标志位,区分每一个 id。

SnowFlake 算法的实现代码 https://github.com/souyunku/SnowFlake

优点

  1. 高性能,本地通过位运算生成,效率快
  2. 高可用,本地生成无节点宕机情况发生
  3. 容量大,每秒中能生成数百万的自增ID
  4. ID自增:存入数据库中,索引效率高

缺点

  1. 依赖与系统时间的一致性,如果系统时间被回调,或者改变可能会造成id冲突或者重复。

实际中我们的机房并没有那么多,我们可以改进改算法,将10bit的机器id优化成业务ID或者业务系统实例数

后面讲讲业内一些公司基于以上几种最基本的ID生成方式,进行的部分优化。

百度uid-generator

uid-generator是由百度技术部开发,基于Snowflake算法实现,与原始snowflake算法不同在于,uid-generator支持自定义时间戳、workId和 序列号等各部分的位数。提供了两种方式,看下面分析

DefaultUidGenerator

DefaultUidGenerator 采用用户自定义workId的生成策略。大致原理如下:
需要新增一个WORKER_NODE表,当应用启动时会向数据库表中插入一条数据,插入成功后返回的自增ID就是workId。
对于时钟回拨的问题,DefaultUidGenerator采用了比较简单粗暴的方式,直接抛出错误

由上图可知,UidGenerator的时间部分只有28位,这就意味着UidGenerator默认只能承受8.5年(2^28-1/86400/365)。当然,根据你业务的需求,UidGenerator可以适当调整delta seconds、worker node id和sequence占用位数。

CachedUidGenerator

CachedUidGenerator是UidGenerator的重要改进实现,workerId的获取方式也和DefaultUidGenerator是一样。核心优化的两个点是:

  1. 利用RingBuffer数据结构预先生成若干个分布式ID并保存。
  2. 通过时间值递增得到时间值(lastSecond.incrementAndGet()),而不是System.currentTimeMillis()这种方式,保证了时间回拨的问题。

注意的是,CachedUidGenerator分布式ID中的时间信息可能并不是这个ID真正产生的时间点。

github地址:https://github.com/baidu/uid-generator

美团(Leaf)

Leaf支持号段模式和雪花算法模式,可以切换使用。

号段模式

思想和我们上面讲的一致,它存储采用数据库。

雪花算法模式

Leaf的snowflake模式依赖于ZooKeeper,不同于原始snowflake算法是在workId的生成上。Leaf中workId是基于ZooKeeper的顺序Id来生成的,每个应用在使用Leaf-snowflake时,启动时都会都在Zookeeper中生成一个顺序Id,相当于一台机器对应一个顺序节点,也就是一个workId。对于时间回拨的问题,美团采取的策略是等待5ms后重新获取,如果发现时间还未追上,那么进行告警。

github地址:https://github.com/Meituan-Dianping/Leaf

参考文献:https://mp.weixin.qq.com/s/SrGDE8G9QC_UZlTRcOIcDw
http://www.360doc.com/content/20/0404/21/47036874_903879107.shtml
公众号:sowhat1412

SAP VC 可配置物料超级BOM简介 在有些业务中比如:汽车、笔记本、电脑、电梯等产品中,其中组成产品的型号个框架是确认的 ,但是框架内部的BOM是可变的,在客户下销售订单的时候,选取对应的组件 ,让后通过MRP的计算优生产线对这样的销售订单提供生产。这个时候我们需要选择我们需要的内存和硬盘的型号,还记得我们前面创建的特征值对应的吗,A对应的8G、B对应16G、X对应1T硬盘、Y对应2T硬盘,这里我们填写对应的值,我们这里选择16G的内存和2T的硬盘,B和Y。3、当我们选择了可配置物料的生产模式时,基本上就选择了按单生产的生产模式了。 阅读详情

相关推荐

解决AutoDock与Python版本冲突导致的内存泄漏问题:从BHtree *错误到环境配置优化

本文深入解析了AutoDock分子对接中常见的‘BHtree *’内存泄漏错误,其根源在于SWIG接口模块与Python运行环境的版本不匹配。文章提供了根治方案:通过构建Python 2.5.4与MGLTools 1.5.6的黄金兼容组合,并详细指导环境清理、安装配置及实战测试,从而彻底解决该内存泄漏问题,确保AutoDock工作流的稳定运行。

g5h6i的博客 1114

mysql 生成唯一自增id 订单号_老司机设计了一个能扛住双11并发的订单号生成方案,同事说“666”...

本文讲解的是如何设计订单号方案,而不是如何设计分布式ID。事实上订单号可以理解为一种特殊的分布式ID,它满足分布式ID所有特性。但是订单ID又有自己的一些特有的属性。要设计订单号首先需要订单号应该要具备的一些特性:唯一性:这绝对是作为订单号最最最基本的特点;高并发:并发能力越高越好;趋势递增但是不能绝对递增:趋势递增会对现代数据库索引结构更友好,但是不要绝对递增是因为绝对递增的话,很容易...

weixin_39728909的博客 720

IVP 2021 UNETR: Transformers for 3D Medical Image Segmentation

动机 具有跟踪和扩展路径的全卷积神经网络(FCNNs)(如编码器和解码器),近年来在各种医学图像分割应用中显示出了突出的地位。在这些体系结构中,编码器通过学习全局上下文表示来扮演一个不可或缺的角色,该全局上下文表示将进一步用于解码器的语义输出预测。 卷积层作为FCNN的主要构造块,其局部性限制了此类网络学习长时空间依赖的能力。 在NLP领域,基于transformer的模型已经在各种任务中实现了最先进的基准。transformer中的自我注意机制使他们能够动态地突出词序列的重要特征并学习其长时依赖关系。这

smile909的博客 1979

根据当前时间错生成8位顺序码_实用向—总结一些唯一ID生成方式

在日常的项目开发中,我们经常会遇到需要生成唯一ID的业务场景,不同的业务对唯一ID的生成方式与要求都会不尽相同,一是生成方式多种多样,如UUID、雪花算法、数据库递增等;其次业务要求上也各有不同,有的只要保证唯一性即可,有的需要加上时间戳,有的要保证按顺序递增等。以下是我结合实际业务中的使用总结了几种唯一ID的生成方式, 要求就是在一般的应用场景下一方面能满足一定数据量级(千万级)的需要...

weixin_39897758的博客 1438

团结引擎+OpenHarmony 记录 (持续更新中)

获取不到的原因是因为二者不在同一个线程中,所以数据没有同步。而 globalThis.context 数据进行了同步。(TuanjieMainWorkerHandler.ts中可以看到)在进行绘制 UI 的时候 ,如果组件有 Native API 就可能不会显示出来,例如 web 控件就不能展示出来,刚加上权限的时候 会报错 因为缺少 reason ,添加上就不会报错了。只有纯 UI 控件是可以展示出来的,注释掉 web控件后就可以。

m_cainiaokuaifei的博客 1492

SAP 替代关系完全替代简介

这里产生了成品物料的计划订单,我们查看计划订单中BOM的变化,如下图可以看到物料的需求仍然落在了优先级为1的这个302300005555这个物料上面,并没有考虑到302300006666的这个库存,和我们理解的MRP的完全替代不一样,按我们的理解需求应该是要落在302300006666这个物料料,但是MRP计算后并没有这样进行分配。最近用户在对长周期物料进行备料的时候又提出替代料的问题,主料库存不足的时候需要考虑替代料的在途库存,经常会忘了SAP标准的替代料逻辑,这次一次性把这个逻辑写清楚。

我小时候很黑的博客 1744

终极版:分布式唯一ID几种生成方案(含雪花算法、UUID、数据库自增)

在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识、商品需要唯一标识、消息需要唯一标识、事件需要唯一标识等,都需要全局唯一ID,尤其是复杂的分布式业务场景中全局唯一ID更为重要。 那么,分布式唯一ID有哪些特性或要求呢? ① 唯一性:生成的ID全局唯一,在特定范围内冲突概率极小。 ② 有序性:生成的ID按某种规则有序,便于数据库插入及排序。 ③ 可用性:可保证高并发下的可用...

稻哥说编程 1万+

学 Simulink—— 基于高频方波电压注入的表贴式永磁电机无感控制仿真

本文手把手教授基于Simulink的高频方波电压注入法实现表贴式永磁同步电机(SPMSM)无传感器控制。针对表贴式电机微弱凸极特性(Lq/Ld≈1.05-1.15),详解方波注入相比正弦注入的优势:通过5kHz方波(PWM频率半值)集中能量提升信噪比,并采用相邻周期电流直接相减的零延迟分离技术。系统架构包含高频注入器、无滤波器信号分离模块、锁相环观测器和磁饱和极性辨识等关键环节,提供参数设置经验(如注入幅值10-15%Vdc)和典型性能指标(位置误差<0.2rad)。特别强调工程实现要点:PWM同步时

xiaoheshang_123的博客 168

java生成8位的uuid_分布式id生成策略,我和面试官扯了一个半小时

面试官:小伙子,你还记得我吗?我是上次面试你的那个面试官。我心想:我去,怎么会不记得,我又不是青年痴呆,上次害我画了那么多图,还使劲敲了一个多钟的电脑,满脑子都是你的阴影。我:记得记得,您好,很高兴能通过二面,能够继续和您交流技术问题。我违背良心说这话真的好吗,姑且就那么一次吧,面个试都那么难?面试官又快速的扫了一下的简历,可能上次看过一次,都快过了一个多星期了,估计他都都忘了我的简历了吧。面试官...

weixin_39609887的博客 1020

从苏宁电器到卡巴斯基(第二部)第14篇:我在卡巴的日子 XIV

目录 WannaCry 我的感慨 邻里矛盾 WannaCry 如果大家对于科技互联网圈子的新闻比较感兴趣的话,相信会对2017年5月的“WannaCry勒索病毒”事件记忆犹新,因为这个病毒在当时的全世界范围内掀起了极大的波澜,众多的企事业单位深受其害,造成的金钱和数据损失难以估量,从某种意义上来说,它甚至引领了勒索病毒新一轮的爆发浪潮。而通过这样的一次爆发,也让我对于卡巴斯基的技术实力有了更进一步的了解。 我记得很清楚,爆发的那天是周六,没记错的话Seth那天有事,就请假没来,只有我自己在公司值

Gleam的专栏 4919

PCL 点到面的ICP算法【2024最新版】

经典的点到面的ICP算法。博客长期更新,本文最新更新时间为:2024年10月18日。

点云侠的博客 36万+

java怎么使用redis的incr的自增序列生成8位长度的id

使用spring-data-redis实现incr自增。

m0_46580493的博客 793

【fpdlink显示】DS90UB948关于941连接948 GPIO调试问题

1. 前言 使用一个941连接2 948显示: 941的GPIO0/1/2/3到前948的GPIO0/1/2/3和941的D_GPIO0/1/2/3到948的GPIO0/1/2/3。 设置gpio3输出,则941的D_GPIO3设置高,而948的gpio3设置不高; 但设置gpio3输入后,看到941的D_GPIO3跟随948的gpio3变化。 2. 原理图连接 3. 测试代码 static int du90ub941_enable_port(struct goodix_ts_d

jzwjzw19900922的博客 2556

分布式ID生成的9种方法,特好用!

前言业务量小于500W或数据容量小于2G的时候单独一个mysql即可提供服务,再大点的时候就进行读写分离也可以应付过来。但当主从同步也扛不住的是就需要分表分库了,但分库分表后需要有一个唯...

磊哥聊Java 636

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

84 节了,《Java高并发&微服务&性能调优实战100讲》,远超预期,即将涨价

兄弟们,我的《高并发&微服务&性能调优实战案例 100 讲》,84节了,59 元 100 个案例(实战+源码+文档+技术支持),需要的朋友加我微信:itsoku涵盖:高并发、接口性能优化、幂等、超卖、MQ 专题、分布式事务、分库分表、常见问题排查、接口签名、接口加解密等各种实战案例内容绝对超出大家预期已发布 84个课时1、SpringBoot实现分片上传实战2、通用并发任务批处...

路人甲Java 581

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

76 节了,《Java高并发&微服务&性能调优实战100讲》,远超预期,即将涨价

兄弟们,我的《高并发&微服务&性能调优实战案例 100 讲》,76 节了,59 元 100 个案例(实战+源码+文档+技术支持),需要的朋友加我微信:itsoku涵盖:高并发、接口性能优化、幂等、超卖、MQ 专题、分布式事务、分库分表、常见问题排查、接口签名、接口加解密等各种实战案例内容绝对超出大家预期已发布 76个课时1、SpringBoot实现分片上传实战2、通用并发任务批处...

路人甲Java 324

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

66 节了,《Java高并发&微服务&性能调优实战100讲》,带你飞

大家好,我是路人。我的《Java 高并发 & 微服务 & 性能调优实战案例 100 讲》已发布了 66 个课时,干货满满。59元,一杯咖啡的价格,100个实战案例,需要的小伙伴速度啦,文末附下单方式所有案例均提供:《文档 & 源码& 技术支持》已发布 66个课时1、SpringBoot实现分片上传实战2、通用并发任务批处理工具类3、使用JUC手写一个好用的压测工...

路人甲Java 302

62 节了,《Java高并发&微服务&性能调优实战100讲》,即将涨价

大家好,我是路人。我的《Java 高并发 & 微服务 & 性能调优实战案例 100 讲》已发布了 62 个课时,干货满满。59元,一杯咖啡的价格,100个实战案例,需要的小伙伴速度啦,文末附下单方式所有案例均提供:《文档 & 源码& 技术支持》已发布 62个课时1、SpringBoot实现分片上传实战2、通用并发任务批处理工具类3、使用JUC手写一个好用的压测工...

路人甲Java 298

生成8位短Id

问题:项目需要用到8位的Id作为设备号,UUID是32位不能满足需求,生成8位Id不难,关键是需要保证全球唯一 TT 这里需要借助 org.apache.commons.lang3.RandomStringUtils 类(lang3的和lang的皆可),生成8位Id:RandomStringUtils.randomAlphabetic(8) 关键点是需要“测试生成Id是否重复” ,概率大不......

weixin_42046751的博客 3924

用户UID的几种生成方案

什么是UID? UID是一个系统内用户的唯一标识, UID的特性: 唯一性、可公开广播、存在可能价值等。 唯一性 通过UID可以快速映射到一个具体的唯一用户上,类似于hash、短网址映射。 可公开广播 UID可以和用户的账号形成对应关系。对于某些以手机号、邮箱这些隐私内容为登录账号的系统,如果想增加转账这种业务,输入对方的UID,可以做到隐私保护。 存在可能价值 类似QQ靓号、B站短ID、微博ID这种可以存在部分价值。 流行的生成方式 随机生成-普通查重模式 经典表ID自增模式 号池模式 随机生成-查重模式

御剑长歌的博客 6327

九种分布式ID解决方案,总有一款适合你!

点击关注公众号,Java干货及时送达????文章目录1、UUID2、数据库自增ID2.1、主键表2.2、ID自增步长设置3、号段模式4、Redis INCR5、雪花算法6、美团(Leaf)7、百度(Uidgenerator)8、滴滴(TinyID)总结比较背景在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表进行了分库分表操作,这时候数据库的自增ID显然不能作为某个订单的唯一标识...

方志朋的博客 249

百度开发的分布式ID生成算法——UID

UID是百度开发的一种分布式ID生成算法,可以生成唯一的、有序的、可读性强的64位ID。UID算法的设计目标是支持高吞吐量和低延迟的分布式系统,它采用了时间戳、数据中心ID、机器ID和随机数等信息生成唯一ID,并支持多种ID生成方式。它可以生成唯一的、有序的、可读性强的ID,方便在日志和数据库中进行查询和分析。同时,UID算法的实现也非常简单,可以快速集成到现有的分布式系统中。需要注意的是,UID算法精确到秒而非毫秒级别,因此在高并发场景下可能会出现重复ID的情况。

程序员野蛮成长 2184

唯一ID(UniqueID)生成算法 解析

本文详细阐述唯一ID生成器算法GuidCombGenerator和SnowflakeGenerator。GuidCombGenerator用于生成字符串UID,SnowflakeGenerator用于生成数值UID。

末小渝的博客 1万+

全局唯一标识符(UID)生成策略

在信息系统中,生成唯一ID是非常常见的需求,尤其是在分布式系统或高并发场景下。以下是几种常见的生成唯一ID的算法或方式:

跟佟格湾一起学习计算机知识吧~ 2559

为什么要分布式 id ?分布式 id 生成方案有哪些?

在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对数据进行分库分表,分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求。......

俺滴的博客 946

6种常见分布式唯一ID生成策略及它们的优缺点对比

全局唯一的 ID 几乎是所有系统都会遇到的刚需。这个 id 在搜索, 存储数据, 加快检索速度 等等很多方面都有着重要的意义。有多种策略来获取这个全局唯一的id,针对常见的几种场景,我在这里进行简单的总结和对比。所谓全局唯一的 id 其实往往对应是生成唯一记录标识的业务需求。这个 id 常常是数据库的主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。这个记录标识上的查询,往往又有分页或者排序的业务需求。所以往往要有一个time字段,并且在time字段上建立普通索引(n

m0_71777195的博客 1084
上一篇: 面试Java后端开发总结心得,很走心的文章(附面试题)
下一篇: 面试再问你CAP、BASE 理论是什么?这篇文章仍甩给他!
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值