j

java前沿技术

V1

2023/05/22阅读:12主题:萌绿

聊聊你们系统的主键id是怎么生成的有什么优点和缺陷

  1. 基于UUID生成分布式ID

    UUID 是通用唯一标识符(Universally Unique Identifier)的简称,它是由一组数字和字母组成的128位二进制数,通常以字符串的形式表示。在分布式系统中,可以使用 UUID 来生成唯一的 ID,这样可以避免因为 ID 冲突而导致数据不一致的问题。
    
    优点:UUID 唯一性高,生成方式简单,适用于分布式系统中的大部分场景。
    
    缺点:UUID 生成的字符串长度较长,不利于存储和传输,而且 UUID 生成算法可能会受到系统时钟的影响,导致 ID 重复或不唯一。
    
  2. 基于雪花算法(Snowflake)生成分布式ID

    雪花算法是一种基于时间戳和机器标识符生成唯一 ID 的算法,它是 Twitter 开源的一种分布式 ID 生成算法。雪花算法生成的 ID 包含时间戳、机器标识符、序列号等信息,可以保证在分布式系统中生成唯一 ID。
    
    优点:雪花算法生成的 ID 长度较短,适合于存储和传输,而且生成速度快,可以满足高并发的需求。
    
    缺点:雪花算法依赖于系统时钟,如果不同节点的时钟存在偏差,可能会导致 ID 重复或不唯一,而且需要保证机器标识符的唯一性,否则也会导致 ID 重复。
    
  3. 基于数据库自增ID生成分布式ID

    在分布式系统中,可以使用数据库的自增 ID 来生成唯一的 ID。在这种方案中,每个节点都有自己的独立数据库,通过数据库自增 ID 的方式来生成唯一 ID。
    
    优点:数据库自增 ID 生成的 ID唯一性高,不受系统时钟的影响,适用于分布式系统中的大部分场景。
    
    缺点:需要保证每个节点都有自己独立的数据库,而且需要考虑分布式事务的问题,否则可能会导致数据不一致的问题。同时,由于数据库自增 ID 的生成方式是有序的,可能会导致高并发场景下的性能问题。
    
  4. 基于Redis生成分布式ID

    在分布式系统中,可以使用 Redis 的原子性操作来生成唯一的 ID。具体实现方式是将 Redis 中的一个计数器作为 ID 的生成器,每次获取 ID 时,通过 Redis 的原子性操作来保证 ID 的唯一性。
    
    优点:Redis 生成的 ID 唯一性高,生成速度快,适用于高并发场景。
    
    缺点:Redis 生成的 ID 受 Redis 服务器的可用性和性能影响,需要考虑 Redis 集群的高可用性和负载均衡的问题。
    

分类:

后端

标签:

后端

作者介绍

j
java前沿技术
V1