分布式学习笔记-唯一主键生成方式
分布式如何生成唯一主键
描述 |
优点 |
缺点 |
|
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博客_雪花编码
分布式学习笔记-唯一主键生成方式相关推荐
- mysql并发获取唯一数值_高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]...
需求说明 在过去单机系统中,生成唯一ID比较简单,可以使用MySQL的自增主键或者Oracle中的sequence, 在现在的大型高并发分布式系统中,以上策略就会有问题了,因为不同的数据库会部署到不同 ...
- 分布式数据库中全局唯一主键
[相关文章] <分布式数据库中全局唯一主键生成策略的设计与实现> <activiti5.10解决分布式集群部署的主键问题> <分布式环境下数据库主键方案> < ...
- Ticket 服务: 一种经济的分布式唯一主键生成方案
2019独角兽企业重金招聘Python工程师标准>>> MySQL分库分表早已经不是什么新鲜话题了.甚至已经成了说到MySQL就会说到的话题.在一张表中,MySQL提供了原生的自增主 ...
- 一篇搞定,分布式系统中唯一主键生成
简介: 分布式系统中最关键的一个问题,ID生成,本文,一篇带你掌握 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很多,适应不同的场景.需求以及性能要 ...
- Hibernate主键生成方式
对于SQLServer数据库在使用中如果将表的主键字段id设为了自增的numeric那么在hibernate中的设置为: <id name="id" type="j ...
- 数据库唯一主键如何实现幂等性?
数据库唯一主键的实现主要是利用数据库中主键唯一约束的特性,一般来说唯一主键比较适用于"插入"时的幂等性,其能保证一张表中只能存在一条带该唯一主键的记录. 使用数据库唯一主键完成幂等 ...
- sql 复合主键 联合主键_学习SQL:主键
sql 复合主键 联合主键 If you've already worked with databases, then you could hardly miss the term – Primary ...
- truncate报ORA-02266错“唯一/主键被启用的外部关键字引用”解决方法
今天想truncate一张表,但报ORA-02266错误 想到可能是主键被子表引用,查了一下 解决如下: SQL> truncate table table_name; truncate tab ...
- oracle唯一索引能删除吗,Oracle:ora-02429:无法用于删除强制唯一/主键的索引 解决...
今天打算删除orcale数据库中无用的表空间,发现报错,查资料删除,写个过程留着备用. 1.drop tablespace dldata INCLUDING CONTENTS CASCADE CONS ...
最新文章
- Tomcat 6 部署工程总结,使用JNDI数据源配置
- 合肥python培训-在合肥学习Python去哪
- DFS求连通块数目(深搜)
- B1928 日期差值
- set trans 必须是事务处理的第一个语句_MySQL中特别实用的几种SQL语句送给大家
- 前端工程师应该掌握哪些技能才方便找工作?
- 【生成器】PHP的生成器yield【原创】
- php 5.4 安装xcache,安装xcache为你的PHP加速
- bootstrap 横铺 行_bootstrap的布局(container、row、col-xs-4)
- php 2m限制,取消php上传2M的限制
- Matlab简单描点绘图
- 人工智能万亿市场待挖掘
- C#学习之IntPtr类型
- 跟着源码看lcn分布式事务
- 7474触发器 异步三进制加法计数器
- ros驱动insta360 oneR运动相机遇到的坑
- 页面自动获取导入excel内容
- c语言共有几种运算符_C语言的运算符和表达式有哪些
- Python中inplace参数
- 2018 “百度之星”程序设计大赛 - 初赛(A)