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

分布式如何生成唯一主键

 

描述

优点

缺点

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博客_雪花编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值