首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

数据库 ID 生成方案:号段模式

还可以使用号段的方式来获取自增 ID,号段可以理解成批量获取。比如从数据库获取 ID 时,就可以批量获取多个 ID 并缓存在本地,提升效率。...比如每次从数据库获取 ID 时,就获取一个号段,如 (1,1000],这个范围表示1000个 ID,业务应用在请求提供 ID 时,只需要在本地从1开始自增并返回,而不需要每次都取请求数据库,一直到本地自增到...对数据库表进行改动如下: CREATE TABLE Test ( id int(10) NOT NULL, current_max_id bigint(20) NOT NULL COMMENT...这种方案不再强依赖数据库,就算数据库不可用,那么系统也能继续支撑一段时间,但如果系统重启,就会丢失一段 ID,导致 ID 空洞。...提高可用性,需要做一个集群,业务在请求集群获取 ID 时,会随机的选择某个节点进行获取,对每个节点来说,数据库连接的是同个数据库,那么就可能会产生多个节点同时请求数据库获取号段,这时就可以利用乐观锁来进行控制

2.3K40

常见的ID生成策略 – IdUtil – Hutool的ID生成工具

本页目录 IdUtil案例 常见ID生成策略 UUID ❄️雪花算法(我觉得了解再多,还得是万能的雪花算法❄️) MongoDB唯一主键 Redis自增主键策略 IdUtil案例 演示了:UUID、nanoID...生成工具,就在这里统一搜集整理一些常见的ID策略 常见ID生成策略 UUID 案例:144985ec-458d-49c5-8338-ba325eca5322 特点:无序、数字与小写英文、长度36位 缺点...:无序、长度太长,超低概率可能会重复 ❄️雪花算法(我觉得了解再多,还得是万能的雪花算法❄️) 特点:纯数字、自增、每秒26万个ID、长度19 雪花算法是推特公司开源的工具:想了解前往本站:https:...一个是机器ID,另一个是数据中心ID(两个ID均是数字)。 保证线程安全,务必获取单例对象!上文案例就是单例对象,随便使用!...MongoDB唯一主键 这里是Hutool工具集成的MongoDB唯一ID生成,我才了解的。

8.6K10

ID生成策略——SnowFlake

二、常见的ID生成策略 1、数据库自增ID(前面提到了) 2、UUID 算法的核心思想是结合机器的网卡、当地时间、一个随记数来生成UUID。...优点:本地生成生成简单,性能好,没有高可用风险 缺点:长度过长,存储冗余,且无序不可读,查询效率低 3、Redis生成ID Redis生成ID可以看做数据库自增ID的升级版。...各个 Redis 生成ID ? 4、Twitter的snowflake算法。 三、snowflake算法 snowflake算法,采用64位二进制整数。二进制具体位数含义如下图。 ?...二进制中最高位1的都是负数,但是我们生成id都使用正数,所以这个最高位固定是0 41位,用来记录时间戳(毫秒)。...在redis中设置一个整数变量workerNum,初始值0,snowflake id生成客户端每次启动时读取redis中的变量,用workerNum%1024作为worker的值,然后把redis中的

1.8K10

全局id如何生成

很多时候我们都需要生成一个全局id用于数据存储的主键,那么如何生成一个全局id呢?有哪些方法?优缺点是啥?...1.数据库自增id 我们需要一个单独的表给我们专门生成自增id,每次到这个专门生成id的表里插入一条数据拿回id,带着这个id去新增自己分表数据; 优点:方便简单,谁都会用; 缺点: 1.单库生成自增...适合的场景:如果你是要随机生成个什么文件名了,编号之类的,你可以用uuid,但是作为主键是不能用uuid的。...因为二进制里第一个bit如果是1,那么都是负数,但是我们生成id都是正数,所以第一个bit统一都是0 41 bit:表示的是时间戳,单位是毫秒。...workId0的备用workerId是512,workId1的备用workerId是513,以此类推……,如果我们0号服务产生了时钟回拨的问题,我们就用其备用服务512去生成id,如果我们认为两套备用服务依然不可靠

1.4K50

用GUID生成随机数(重复性基本0)

随机数不管是前端还是后端都会用到的一个地方,不管是从验证码还是各种生成的状态码,基本都是随机生成的,还有就是一些抽奖的算法,也是用随机数来处理的,生成随机数的方法目前是很多的,但是其实很多是重复性很大的...,今天简单的讲一下怎么生成随机数重复性很低的一种办法GUID(Globally Unique Identifier)一种由算法生成的二进制长度128位的数字标识符 不重复的原理:GUID 的总数达到了...2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。...用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。...模式的字符串 * 参数:第1个参数表示32位的字符串 * 返回值:标准GUID格式的字符串 */ GUID.prototype.formatGUID

2.6K30

分布式ID生成

⽣成ID性能⾮常好,基本不会有性能问题。 全球唯⼀,在遇⻅数据迁移,系统数据合并,或者数据库变更等情况下,可以从容应对。 缺点: 没有排序,⽆法保证趋势递增。...性能不够要求的时候,我们可以尝试使⽤Redis来⽣成ID。...这主要依赖于Redis是单线程的, 所以也可以⽤⽣成全局唯⼀的ID。可以⽤Redis的原⼦操作 INCR和INCRBY来实现。 优点: 不依赖于数据库,灵活⽅便,且性能优于数据库。...数字ID天然排序,对分⻚或者需要排序的结果很有帮助。 缺点: 如果系统中没有Redis,还需要引⼊新的组件,增加系统复杂度。 需要编码和配置的⼯作量⽐较⼤。 ⽹络传输造成性能下降。...雪花算法(分布式自增长ID https://blog.csdn.net/lydms/article/details/124696135

12130

数据库 ID 生成方案:数据库多主模式

将两个数据库组成主从模式的集群,正常情况下,是可以解决数据库的可靠性问题,但如果主库挂掉后,数据没有及时同步到从库,这个时候就会出现 ID 重复的问题。...可以使用双主模式集群,也就是两个实例都能单独的生产自增ID,这样能够提高效率,不过就需要单独给每个数据库实例配置不同的起始值和自增步长。...ID 序列如下: mysql01:起始值1,步长2,ID 生成的序列为:1,3,5,7,9,......mysql02:起始值2,步长2,ID 生成的序列为:2,4,6,8,10,... 实行这种方案后,就算其中某一台实例不能提供正常服务了,也不会完全影响整个系统。...假设要再增加新的实例,不仅要解决 ID 冲突的问题,而且还需要停止服务才能进行。 解决以上问题,后面还会继续介绍更常见的一些解决方案。

58720
领券