`

生成ID

 
阅读更多
ID生成算法,其中一种就是使用GUID(又称UUID),使用128位存储。UUID的一个问题是太长,可读性太差,人脑无法记忆。

替代方案之一,就是使用关系数据库的自增长字段,自增长字段的一个问题是,无法预先创建一个ID,只能够在保存的时候才能生成ID,这对于批量关联插入数据来说,不满足需求。

替代方案之二,就是使用一个记录ID的表,每次加一,在事务中使用Select FOR UPDATE来读取然后UPDATE SET FVALUE = FVALUE + 1,或者使用我之前文章中所提到的CAS算法。 这样做,会导致性能低下,每生成一个ID的成本都很高。

替代方案之三,就是把ID分成两部分,Seed和IncrementID。Seed采用上面的方案二或者其他办法生成,IncrementID使用一个AtomicInteger来每次递增生成。SEED转化为九进制数字,这样SEED就不会包含9,于是使用9作为分隔符,把SEED和IncrementID隔开。这样做,就可以做高性能产生ID,而且确保不重复。甚至可以更进一步,SEED由一个中心服务器生成。使用9个分隔符号隔开SEED和IncrementID,好处是SEED是变长,而不是使用固定位数来保存SEED,这样产生的ID会更短,可读性更好。

举例,34915,其中34时SEED,15是IncrementID,9是分隔符,SEED部分采用九进制表示法,确保不出现9,第一个9之后的内容属于IncrementID。

我已经做了一个实现,用于实际开发中,思路采用方案三,有很多实作的细节,但是总体设计思路就是如此。
分享到:
评论

相关推荐

    java自动生成id策略

    在Java编程中,自动生成ID是一项常见的需求,特别是在数据库记录、分布式系统节点标识等领域。"java自动生成id策略"指的是设计并实现一种机制,确保在多线程环境下能够高效、唯一地生成ID。这里我们将详细探讨这个...

    oracle数据库id为uuid类型时自动生成id

    oracle数据库id为uuid类型时自动生成id的工具类,不再依赖sequence自增长

    common生成ID主键

    UUIDEntity生成主键有分String,Integer,Long等类型

    go-id-builder ID生成器

    通常,这个文件会定义一个结构体,如`IDBuilder`,并提供生成ID的接口,如`GenerateID()`。可能还包含了线程安全的考虑,确保在多线程环境下也能正确生成ID。 2. `watch.go`:这可能是用来监控和响应系统变化的代码...

    自动生成ID(32位)所用jar

    在Java开发中,生成唯一的32位ID是一个常见的需求,特别是在分布式系统中,例如数据库主键生成、用户唯一标识、订单编号等。Apache Commons Lang库提供了一种解决方案,该库包含在你提到的两个jar文件中。Apache ...

    C#根据时间产生ID编号

    在某些场景下,基于时间戳来生成ID是一种常见且有效的方法。这种方式不仅简单易行,还能确保大部分情况下ID的唯一性。在给定的代码示例中,展示了如何在C#中利用当前时间来生成一个带有随机后缀的ID编号。 #### ...

    php-snowflake.tar.gz 随机生成ID,一直安装用的tar包

    - **低延迟**:Snowflake算法不需要网络通信,生成ID的速度非常快。 在实际应用中,这种ID生成器常用于数据库主键、分布式系统的事务ID、用户会话ID等场景,需要大量且全局唯一的标识符。 为了使用这个`...

    java自动生成ID号的方法

    这篇文章将深入探讨Java如何自动生成ID号,并提供一种基于UUID的实现方式。 首先,让我们理解什么是ID号。在软件开发中,ID(Identifier)通常是一个唯一且不可变的值,用于识别和区分不同的实体或对象。在Java中,...

    雪花算法生成ID , 在前端精度丢失的问题?

    雪花算法生成ID , 在前端精度丢失的问题?

    雪花id生成器源码-雪花算法ID生成器

    雪花算法ID生成器 一个适合大量数据的主键生成器 可以尽可能的让数据靠拢; 可以赋予主键更多的区分信息 支持数据库的扩容/分片

    MTPA MPTV查询表自动生成 .zip

    本文将详细介绍这两个算法,并结合提供的压缩包文件,解析如何生成idiq查询表以及电机参数输入的GUI界面。 首先,MTPA算法旨在最大化电机的转矩电流比,即在给定电流下获得最大的转矩。这一策略可以减少电流需求,...

    使用表的id生成

    这可能涉及到从特定的数据库表或外部系统获取ID,或者使用特定的算法生成ID。 3. **@Id注解**: 在JPA实体类中,使用`@Id`注解标记主键字段,表明该字段是实体的唯一标识。例如: ```java public class MyEntity...

    java根据时间生成唯一ID

    java根据时间生成唯一ID,普通的根据时间生成的ID放在循环内很容易重复。

    分布式ID生成策略_snowflake算法

    2. **单点故障**:如果工作节点ID固定,那么一旦该节点故障,将无法生成ID。可以通过分布式部署来缓解这个问题。 3. **时间戳限制**:虽然69年的跨度看似很长,但未来可能会遇到上限问题。 在实际应用中,开发者...

    Hibernate教程02_ID生成策略

    2. ** Auto Increment **:适用于关系型数据库,如MySQL、SQL Server等,由数据库自增来生成ID。在Hibernate中,这个策略通常用`@GeneratedValue(strategy = GenerationType.IDENTITY)`表示。 3. ** Identity **:...

    java主键生成 id

    java主键生成,通过自定义前缀加时间生成机制,是主流项目的常用方法,有的是通过JAVA实现,有的是通过存储过程,其实都差不多

    mysql雪花算法生成唯一整型ID主键的实现方法

    MySQL 雪花算法生成唯一整型ID主键的实现主要针对大数据环境下,需要大量生成全局唯一ID的需求。雪花算法是一种分布式ID生成策略,由Twitter开源,其设计目标是在分布式系统中生成具有全局唯一性、有序性和高并发性...

    Springboot唯一编号整合,vesta全局唯一id生成器

    - 在分布式环境中,每个节点独立生成ID,通过网络通信进行协调,降低了单点故障的风险。 5. **SpringCloud集成**: - 如果你的系统采用了SpringCloud,可以将Vesta ID Generator作为服务注册到Eureka或Consul等...

    基于MySQL的ID生成器idgo.zip

    idgo是一个利用MySQL批量生成ID的ID生成器, 主要有以下特点:每次通过事务批量取ID,性能较高,且不会对MySQL造成压力.当ID生成器服务崩溃后,可以继续生成有效ID,避免了ID回绕的风险.业界已经有利于MySQL生成ID的方案,...

    大数据一秒生成5000000不重复ID

    大数据一秒生成5000000不重复ID SnowflakeIDWorker 用到 long timestamp = timeGen(); timestamp 以及上一个 timestamp 加位移.

Global site tag (gtag.js) - Google Analytics