分布式订ID生成策略

1. UUID/GUID (通用唯一识别码)

1.1 UUID/UUID组成

  • 当前日期和时间
  • 时钟序列
  • 全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得)

1.2 UUID/UUID优势

  • 使用简单
  • 全球唯一
  • 性能好

1.3 UUID/UUID缺点

  • 存储字符串,太长,占用空
  • 查询效率低
  • 生成的ID不易理解
  • 不能递增,不能排序

1.4 变种UUID

  • 为了解决UUID不可读,可以使用UUID to Int64的方法。
  • 为了解决UUID无序的问题,NHibernate在其主键生成方式中提供了Comb算法(combined guid/timestamp)。保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。

2. 数据库自增长字段

2.1 原理

利用数据库使用auto_increment自增长字段

2.2 优点

  • 无需编码
  • 性能可以
  • 索引友好

2.3 缺点

  • 不能做水平分表,后期扩展麻烦
  • 高并发下插入数据影响性能3. 雪花算法

3. 雪花算法

3.1 结构

  • 最高位为未使用,
  • 接下来的41位为毫秒级时间(41位的长度可以使用69年),
  • 接下来的5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,
  • 最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
  • 一共加起来刚好64位,为一个Long型。(转换成字符串长度为18)。

3.2 优势

  • 存储空间小,查询效率高
  • 可以生成有顺序的id
  • 性能高,每秒能生成26个ID

4. 基于redis自增

4.1 原理

利用redis的incr(key)用于将key进行自增,并返回增长的数值,redis有如下特性:单线程原子操作、自增计数API、数据有效期机制EX。

4.2 优点

  • 扩展性强,可以方便的结合业务进行处理
  • 利用redis操作原子性的特性,支持并发

4.3 缺点

  • 依赖于redis,需要维护redis集群,保证redis服务的高可用
  • 增加网略开销

 

参考

https://blog.csdn.net/fanfan199312/article/details/89430478

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值