分布式如何生成唯一主键

描述

优点

缺点

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

伪代码
Timestamp now
int sequence =0
Timestamp last=-1L
long ID
now= currentTime();synchronized {if(now <last)){//clock is moving backwards.throw exception}else if(now == last){sequence ++if(sequence  >4095){now==currentTime()+1;sequence =0 }else{sequence =0;last=now;}   ID = now <<22 | workID<<12 | sequence
}

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

分布式学习笔记-唯一主键生成方式相关推荐

  1. mysql并发获取唯一数值_高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]...

    需求说明 在过去单机系统中,生成唯一ID比较简单,可以使用MySQL的自增主键或者Oracle中的sequence, 在现在的大型高并发分布式系统中,以上策略就会有问题了,因为不同的数据库会部署到不同 ...

  2. 分布式数据库中全局唯一主键

    [相关文章] <分布式数据库中全局唯一主键生成策略的设计与实现> <activiti5.10解决分布式集群部署的主键问题> <分布式环境下数据库主键方案> < ...

  3. Ticket 服务: 一种经济的分布式唯一主键生成方案

    2019独角兽企业重金招聘Python工程师标准>>> MySQL分库分表早已经不是什么新鲜话题了.甚至已经成了说到MySQL就会说到的话题.在一张表中,MySQL提供了原生的自增主 ...

  4. 一篇搞定,分布式系统中唯一主键生成

    简介: 分布式系统中最关键的一个问题,ID生成,本文,一篇带你掌握 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很多,适应不同的场景.需求以及性能要 ...

  5. Hibernate主键生成方式

    对于SQLServer数据库在使用中如果将表的主键字段id设为了自增的numeric那么在hibernate中的设置为: <id name="id" type="j ...

  6. 数据库唯一主键如何实现幂等性?

    数据库唯一主键的实现主要是利用数据库中主键唯一约束的特性,一般来说唯一主键比较适用于"插入"时的幂等性,其能保证一张表中只能存在一条带该唯一主键的记录. 使用数据库唯一主键完成幂等 ...

  7. sql 复合主键 联合主键_学习SQL:主键

    sql 复合主键 联合主键 If you've already worked with databases, then you could hardly miss the term – Primary ...

  8. truncate报ORA-02266错“唯一/主键被启用的外部关键字引用”解决方法

    今天想truncate一张表,但报ORA-02266错误 想到可能是主键被子表引用,查了一下 解决如下: SQL> truncate table table_name; truncate tab ...

  9. oracle唯一索引能删除吗,Oracle:ora-02429:无法用于删除强制唯一/主键的索引 解决...

    今天打算删除orcale数据库中无用的表空间,发现报错,查资料删除,写个过程留着备用. 1.drop tablespace dldata INCLUDING CONTENTS CASCADE CONS ...

最新文章

  1. Tomcat 6 部署工程总结,使用JNDI数据源配置
  2. 合肥python培训-在合肥学习Python去哪
  3. DFS求连通块数目(深搜)
  4. B1928 日期差值
  5. set trans 必须是事务处理的第一个语句_MySQL中特别实用的几种SQL语句送给大家
  6. 前端工程师应该掌握哪些技能才方便找工作?
  7. 【生成器】PHP的生成器yield【原创】
  8. php 5.4 安装xcache,安装xcache为你的PHP加速
  9. bootstrap 横铺 行_bootstrap的布局(container、row、col-xs-4)
  10. php 2m限制,取消php上传2M的限制
  11. Matlab简单描点绘图
  12. 人工智能万亿市场待挖掘
  13. C#学习之IntPtr类型
  14. 跟着源码看lcn分布式事务
  15. 7474触发器 异步三进制加法计数器
  16. ros驱动insta360 oneR运动相机遇到的坑
  17. 页面自动获取导入excel内容
  18. c语言共有几种运算符_C语言的运算符和表达式有哪些
  19. Python中inplace参数
  20. 2018 “百度之星”程序设计大赛 - 初赛(A)

热门文章

  1. python贺卡文字_圣诞贺卡制作
  2. Flutter集成百度定位和百度地图
  3. OpenCV学习之读取摄像机
  4. 中国电信转战搜索市场成败难测(来源:IT时代周刊)
  5. 学习笔记 | 查找成绩排名第二的学生
  6. Jackson之jackson-core
  7. Jackson之jackson-annotations
  8. 双路由设置上网与共享
  9. python 职业技能大赛备赛(2)
  10. ADS-B地面接收机 AERO-1090-2