`

生成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策略

    1.自动生成id策略. 2.当多线程进入java类,自动生成id.生成规则,根据毫秒然后+3个随机数.

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

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

    common生成ID主键

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

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

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

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

    生成32位永不重复的随机数作为id,java开发中经常用到,包里是apache的2个jar

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

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

    java自动生成ID号的方法

    主要介绍了java自动生成ID号的方法,涉及java生成ID号的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    java根据时间生成唯一ID

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

    java主键生成 id

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

    基于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 加位移.

    delphi id 生成

    delphi 16位id 生成

    MTPA MPTV查询表自动生成 .zip

    基于电动汽车用PMSM永磁同步电机MTPA_MTPV算法生成idiq表,文件内包含说明文档、生成id iq查询表所用的m程序、以及电机参数输入gui界面

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

    mysql雪花算法生成唯一整型ID主键的实现方法,整型ID作为主键好处有很多,比如节省存储空间、插入和查询排序快、具有一定规律性(时间顺序)等。

    PHP Snowflake(雪花算法)生成唯一ID值

    最近项目需要解决高并发分布式生成唯一ID值的问题,经过考虑,采用Snowflake算法,该算法是一个很有效的办法,具体的可以自己百度,这里是基于thinkPHP5 开发的通用的生成器,其实也是参考了网上的方法,只是增加了...

    java生成16位long类型id

    1.获取系统时间 + 随机数,但是由于系统时间前几位是相同的,所以截取几位数字; 2.获取随机数,math的方法,截取几位数字; 3.判重校验

    JAVA自带的方法生成唯一ID

    java中有自带的方法可以自动帮助我们实现id的获取,可以作为稳定的工具类。可自定义。

    go-id-builder ID生成器

    这是一个ID生成器,它可以提供通过高效的方式产生连续的唯一的ID值。在分库分表时可以提供非常有用的帮助。

    雪花生成Id

    雪花是一个可以生成不重复的,唯一的ID,可以用于app的id生成和数据库的主键生成

    id-generator:为流星集合生成 id

    ID 生成器 0.0.4 为带或不带前缀的集合生成 id。安装 meteor add theara: id - generator用法 // idGenerator.gen(collection, length, [field]); // default field = _idvar id = idGenerator . gen ( ...

Global site tag (gtag.js) - Google Analytics