`

业务unique ID的生成策略分析

 
阅读更多

 

业务unique ID的生产策略分析

 

需求上下文:

 

业务是和单个user相关的(userId),业务表分到10个DB host中

 

 

 需求:

 高并发下生产唯一的业务ID

 

 

首先根据此用户的userId mapping到不同的DB host(oracle), 

 

每个DB host上有一个业务seq,  这个seq自增步长是10,然后每个host起点不一样, 0 是0, 1是1,这样每个 DB host生成的seq数据就不会冲突(host1上只会生产尾数为1的seq,host2上只会生产尾数为2的seq,类推)

 

具体生产seq的oracle sql为:

 

SELECT  BUSINESS_ID_SEQ_0.NEXTVAL FROM dual   //生成一个

 

SELECT  BUSINESS_ID_SEQ_0.NEXTVAL FROM dual CONNECT BY LEVEL <= 100  //生成100个

 

 

查询的时候每次seq生成100个,缓存到本地内存中的队列(ConcurrentLinkedQueue), 下次就从内存中取了

 

但这个code中的synchronized锁加的很奇怪, ConcurrentLinkedQueue是在锁的代码块内部使用的, 但如果上下文环境是安全的,ConcurrentLinkedQueue这个高并发队列不就没意义了吗,

 

个人觉得加锁应该只加在从数据库拿100个seq的时候加,防止多个线程同时去数据库创建100个seq,导致重复创建。在那之外的获取seq其实不用加锁的,因为ConcurrentLinkedQueue已经是线程安全。

0
0
分享到:
评论

相关推荐

    全局唯一ID生成

    在实际应用中,我们可以根据业务需求选择合适的ID生成策略。例如,如果对ID的排序有要求,可以选择基于时间戳的方案;如果对ID长度有严格限制,可以考虑使用ObjectID;如果需要高并发且无特定顺序要求,雪花算法可能...

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

    - 对于超大规模的系统,可以考虑使用多层ID生成策略,比如区域节点+工作节点+序列号。 通过以上步骤,我们可以在SpringBoot项目中成功地集成Vesta ID Generator,为分布式系统提供稳定、高效的全局唯一ID生成方案...

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

    例如,Snowflake算法是一种广泛使用的分布式ID生成策略,由Twitter开源。它生成的是64位的ID,其中包括时间戳、工作节点ID和序列号,可以保证全局唯一且按时间顺序排序。虽然Snowflake不是Apache Commons Lang的一...

    利用雪花算法生成uuid

    同时,也可以结合其他ID生成策略,如数据库自增ID、UUID V4等,以达到更好的性能和安全性平衡。 总之,雪花算法提供了一种高效、有序的全局唯一ID生成方案,广泛应用于分布式系统,如数据库主键生成、消息队列的...

    细聊分布式ID生成方法

    Twitter开源的Snowflake算法是另一种流行的趋势有序的分布式ID生成策略。它将ID分为三部分: 1. 工作节点ID(worker ID):用于标识多个分布式节点,可以配置为多个位,例如5位,最多支持31个节点。 2. 序列号...

    分布式系统中唯一ID的生成方法共3页.pdf.zip

    标题中的“分布式系统中唯一ID的生成方法”指的就是如何在这样一个复杂的环境中设计和实现一个有效的ID生成策略。通常,这样的系统需要处理海量的数据和高并发请求,因此ID生成器必须具备高效、可扩展以及高度可用的...

    50_一个关键的问题!分库分表之后全局id咋生成?.zip

    在IT行业中,数据库扩展是常见的需求,特别是在高并发、大数据量的应用场景下,分库分表成为提升系统性能的有效手段。...在实际应用中,往往需要根据业务需求进行权衡和定制,以找到最适合的全局ID生成策略。

    Mysql全局ID生成方法

    以下是一些常见的全局ID生成策略: 1. **基于CAS(Check and Set)协议** CAS协议常用于解决并发控制问题,其核心思想是每个数据对象都有一个版本号。在生成全局ID时,可以利用类似的理念。首先,从序列表(如`...

    hibernate中自动生成主键的办法

    综上所述,Hibernate提供了丰富的主键生成策略,涵盖了从简单的自动增长到复杂的分布式唯一ID生成。开发者应根据具体的应用需求和数据库特性,选择最合适的主键生成策略,以确保系统的稳定性和性能。无论是追求高...

    分布式架构系统生成全局唯一序列号的一些思路对比分析

    利用Redis的原子操作(如INCR命令)可以实现分布式环境下的唯一ID生成。这种方式灵活高效,但依赖于Redis服务的稳定性,如果Redis出现故障,可能会影响ID的生成。 5. **IP+时间戳** 结合服务器的IP地址和当前...

    分布式系统ID生成器解决方案.docx

    分布式系统中的ID生成是一个至关重要的任务,特别是在大型的复杂分布式环境中,如美团点评的金融、支付、餐饮等产品。随着数据量的不断增长,数据库的分库分表策略需要一个全局唯一的ID来标识每条记录,传统的数据库...

    全局唯一id生成器vesta.rar

    在分布式环境中,为了确保每个实体的标识都是唯一的,全局唯一ID生成器扮演着至关重要的角色。Vesta的设计目标是高效、可扩展且无冲突,使得在大规模并发场景下也能稳定工作。 Vesta的工作原理基于Snowflake算法的...

    C#自动生成序列号 源码

    在IT行业中,序列号生成是常见的...总的来说,C#自动生成序列号涉及多个知识点,包括`Guid`、`DateTime`、随机数生成以及可能的加密和验证策略。通过理解和运用这些工具,开发者可以创建出符合业务需求的序列号系统。

    自动生成主键uuid.zip

    在Java编程中,UUID(Universally Unique Identifier)是一种标准的128位的全局唯一标识符,用于生成不可预测、全局唯一的ID。...通过理解UUID的生成机制和结合其他数据,开发者可以定制适合特定需求的ID生成策略。

    hibernate主键生成策略

    ### Hibernate 主键生成策略 在Hibernate框架中,主键生成策略是对象持久化的重要组成部分,它主要用于自动管理和生成实体类的唯一标识(即主键)。根据给定的文件信息,我们可以详细探讨这几种主键生成策略的特点...

    分布式id方法

    综上所述,选择合适的分布式ID生成策略需要综合考虑系统的特定需求、可用资源以及未来的发展方向。例如,在追求性能和扩展性的场景下,可以考虑采用基于时间戳的算法(如Snowflake算法)结合UUID的优点,以平衡唯一...

    Hibernate内置标识符生成器

    Hibernate 提供了多种内置的标识符生成策略,以适应不同的数据库系统和应用场景。 1. Increment 标识符生成器:这种生成器适用于逻辑主键,它在 Hibernate 初始化时获取表中最大 ID,然后在插入新记录时递增。但...

    awesome-unique-id:精选的超赞唯一ID的清单

    "awesome-unique-id"是一个专门收集和整理了各种优秀唯一ID生成策略的资源清单。这个清单旨在帮助开发者们找到适合他们项目的高效、可靠且具有独特性的唯一ID生成方案。 首先,我们来了解一些关于唯一ID的基本概念...

    分布式ID常见解决方案.docx

    高可用高性能则意味着ID生成服务必须能在高并发场景下稳定运行,避免成为系统的瓶颈。 业界常见的分布式ID生成方案有以下几种: 1. UUID方案:UUID(Universally Unique Identifier)通过算法生成一组36个字符的...

Global site tag (gtag.js) - Google Analytics