当前位置:   article > 正文

分布式学习笔记-唯一主键生成方式_java分布式唯一主键

java分布式唯一主键

分布式如何生成唯一主键

 

描述

优点

缺点

UUID

UUID 通用唯一标识码缩写,其目是让分布式系统中所有元素都有唯一的辨识信息,而且不需要通过中央控制器来指定唯一标识

java.util.UUID.randomUUID().toString()

1)降低全局节点的压力,使得主键生成速度更快

2)生成的主键全局唯一

3)跨服务器合并数据方便

1)由于无序,检索效率低

2)UUID 占16字节,占用空间大

数据库主键自增

Mysql表主键自增

1) INT 和BIGINT 占用空间小

2)顺序性好,检索性能好,索引的裂变

1)并发性能不高,受限于数据库性能

2)分库分表需要改造,复杂

3)由于自增,数据量会泄露

Redis自增

Redis INT incre 自增保证原子性

1)速度快

2)并发能力好

1)由于内存存储,如果redis宕机会丢失

2) 由于自增,数据量会泄露

雪花算法

分布式经典应用

1)不依赖外部组件

2)性能好

3)有序性

时钟回拨

雪花算法 snowFlake

雪花算法生成的ID 8个字节64位

1,符号位  占1位(正负位)

2,时间戳   占用41位,时间戳的单位是毫秒 (支持69年的时间跨度)

3, 机器标识  占10位  支持1024部机器

4,序列号,占12位,一毫米可以生成0到4095,4096个ID

 

  1. 伪代码
  2. Timestamp now
  3. int sequence =0
  4. Timestamp last=-1L
  5. long ID
  6. now= currentTime();
  7. synchronized {
  8. if(now <last)){
  9. //clock is moving backwards.
  10. throw exception
  11. }else if(now == last){
  12. sequence ++
  13. if(sequence >4095){
  14. now==currentTime()+1;
  15. sequence =0
  16. }else{
  17. sequence =0
  18. last=now;
  19. }
  20. ID = now <<22 | workID<<12 | sequence
  21. }

可以参考这个老哥写的雪花算法简介以及代码实现_不爱吃胡萝卜的阿丁的博客-CSDN博客_雪花编码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/307193
推荐阅读
相关标签
  

闽ICP备14008679号