分布式全局唯一 ID生成器(百度UidGenerator)
文章目录
- 为什么要使用全局ID生成器?
- 使用UUID作为主键?
- 使用数据库主键自增?
- UidGenerator简介
- 雪花算法snowflake
- SpringBoot整合百度UidGenerator
为什么要使用全局ID生成器?
在分库分表中必定会面临着一个问题, 就是如何快速高效的生成唯一性ID。
使用UUID作为主键?
生成的ID是字符串,不是数字,难以比较大小
生成的不是有序增长的, 在很多的查询中不方便
使用数据库主键自增?
- 分库分表的场景下无法保证主键唯一性
UidGenerator简介
UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器。
它是分布式的,并克服了雪花算法的并发限制。
单个实例的QPS能超过6000000。
需要的环境:JDK8+,MySQL(用于分配WorkerId)
雪花算法snowflake
由下图可知,雪花算法的几个核心组成部分:
1为sign标识位;
41位时间戳;
10位workId(数据中心 +工作机器,可以其他组成方式);
12位自增序列;
但是百度对这些组成部分稍微调整了一下:
由上图可知,UidGenerator的时间部分只有28位,这就意味着UidGenerator默认只能承受8.5年(2^28-1/86400/365)
也可以根据你业务的需求,UidGenerator可以适当调整delta seconds、worker node id和sequence占用位数。
SpringBoot整合百度UidGenerator
在项目使用的数据库里,执行WORKER_NODE表脚本
DROP TABLE IF EXISTS WORKER_NODE;
CREATE TABLE WORKER_NODE
(
ID BIGINT NOT NULL AUTO_INCREMENT COMMENT 'auto increment id',
HOST_NAME VARCHAR(64) NOT NULL COMMENT 'host name',
PORT VARCHAR(64) NOT NULL COMMENT 'port',
TYPE INT NOT NULL COMMENT 'node type: CONTAINER(1), ACTUAL(2), FAKE(3)',
LAUNCH_DATE DATE NOT NULL COMMENT 'launch date',
MODIFIED TIMESTAMP NOT NULL COMMENT 'modified time',
CREATED TIMESTAMP NOT NULL COMMENT 'created time',
PRIMARY KEY(ID)
)COMMENT='DB WorkerID Assigner for UID Generator',ENGINE = INNODB;
maven的pom文件里引入依赖
<properties><uid-generator.version>1.0.3.RELEASE</uid-generator.version>
</properties>
<dependencies><dependency><groupId>com.github.wujun234</groupId><artifactId>uid-generator-spring-boot-starter</artifactId><version>${uid-generator.version}</version></dependency>
</dependencies>
配置文件application.yml里引入自定义配置
# UidGenerator
# 初始时间, 默认:"2019-02-20"
uid:epochStr: 2020-05-08# 时间位, 默认:30timeBits: 41# 机器位, 默认:16workerBits: 10# 序列号, 默认:7seqBits: 12# 是否容忍时钟回拨, 默认:trueenableBackward: true# RingBuffer size扩容参数, 可提高UID生成的吞吐量, 默认:3CachedUidGenerator:boostPower: 3# 指定何时向RingBuffer中填充UID, 取值为百分比(0, 100), 默认为50paddingFactor: 50
IdGenerator.java工具类
这边我们使用CachedUidGenerato
@Component
public class IdGenerator {@Autowiredprivate CachedUidGenerator cachedUidGenerator;/*** 获取uid** @return*/public long nextId() {return cachedUidGenerator.getUID();}/*** 格式化传入的uid,方便查看其实际含义** @param uid* @return*/public String parse(long uid) {return cachedUidGenerator.parseUID(uid);}
}
分布式全局唯一 ID生成器(百度UidGenerator)相关推荐
- Spring Boot 工程集成全局唯一ID生成器 Vesta
2019独角兽企业重金招聘Python工程师标准>>> 本文内容脑图如下: 文章共 760字,阅读大约需要 2分钟 ! 概 述 在前一篇文章 <Spring Boot工程集成全 ...
- [分布式] ------ 全局唯一id生成之雪花算法(Twitter_Snowflake)
雪花算法(Twitter_Snowflake) 我们知道,分布式全局唯一id的生成,一般是以下几种: 基于雪花算法生成 基于数据库 基于redis 基于zookeeper 本文说下雪花算法,后面附源码 ...
- Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案
Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 参考文章: (1)Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 (2)https://www.cnblogs.com/ ...
- java 唯一id生成算法_分布式全局唯一ID生成方案之snowflake算法
已有的方案: 可大致分为: 完全依赖关系/非关系型数据库递增的方案 完全不依赖数据源作为生成因子的UUID 半依赖数据源作为生成因子的snowflake 为什么推荐snowflake? 这个问题,可以 ...
- java id生成器 分布式_分布式高效唯一ID生成器(sequence)
分布式高效唯一ID生成器(sequence) 简介 高效GUID产生算法(sequence),基于Snowflake实现64位自增ID算法. Twitter-Snowflake算法产生的背景相当简单, ...
- 分布式全局唯一ID的实现
分布式全局唯一ID的实现 前言 上周末考完试,这周正好把工作整理整理,然后也把之前的一些素材,整理一番,也当自己再学习一番. 一方面正好最近看到几篇这方面的文章,另一方面也是正好工作上有所涉及,所以决 ...
- 基于百度的UidGenerator改造的全局唯一id生成器
其实百度的UidGenerator生成器也是基于snowflake算法的,在原生的项目中使用的基于数据库的,我改造成了基于zookpeer的,用zookpeer的序列号实现分布式seq的生成(代替了算 ...
- springboot项目创建全局唯一id生成器
springboot项目创建全局唯一id生成方法,参考 Snowflake算法 yml文件 #app 全局唯一id生成 app:idGenerator:workerId: 1datacenterId: ...
- 全局唯一id生成器----Vesta
引入依赖: <dependency><groupId>com.robert.vesta</groupId><artifactId>vesta-servi ...
最新文章
- 【实操】Y7000P 2020款安装黑苹果完整步骤记录
- ssl2331OJ1373-鱼塘钓鱼 之1【纯贪心】
- html js倒计时不准确,js倒计时代码:第2个倒计时为什么会不正常?
- TLE5012B磁编码器原理及优点,径向充磁磁铁的安装。AS5047、AS5048、AS5600、TLE5012、MA730
- %3c?php else:?%3e,[红日安全]代码审计Day15 - $_SERVER['PHP_SELF']导致的防御失效问题
- [BZOJ3124]直径
- 【源代码】Image Deformation Using Moving Least Squares算法的实现
- android获取按钮上的字,Android--在一个Button上显示不同类型的字体
- (四)Ubuntu 14.04 文件服务器--samba的安装和配置
- python遍历目录压缩文件夹_zip包含一个档案文件夹,如何使用Python获取存档中每个zip的注释?...
- 期末前端web大作业——基于HTML当当图书网项目的设计与实现 网上书城 网上书店 在线书店网页
- [uboot 移植]uboot 移植过程
- Java 10 大装 B 写法,装逼常用代码
- 物联网的原理、应用和技能
- 计算机登录界面没有用户显示不出来,笔记本电脑登录页面不显示 怎么解决
- 参加了feedsky的blog挑战赛
- 云锁和悬镜服务器哪个好,安全狗、悬镜、云锁、云帮手建议用哪个比较好?
- View被遮挡的解决办法
- 七夕了,给你的那个TA画上一箭倾心吧~
- 开源与标准协同发展研究报告(2022)
热门文章
- Li‘s 核磁共振影像数据处理-4-使用3D Slicer从DTI计算参数图(FA、ADC等)
- 网络基本功:http报文及TCP拥塞控制机制
- 四年云战争,华为打出了什么结果?
- 插图表格清单自动生成
- python2安装tensorflow,tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
- 吉林省计算机水平考试试题,2015吉林省计算机等级考试试题 二级ACCESS必过技巧...
- fopen 与 open 的区别
- 电脑桌面日历便签软件怎么通过月视图查看某一天的便签内容记录?
- 腾讯盛大百度版咆哮体
- 【图形学】光照模型-从最简单开始到BRDF实现