当前位置:网站首页>分布式id 生成器实现
分布式id 生成器实现
2022-08-09 06:29:00 【史上最强的弟子】
随着业务的扩展的需要,分库是很多业务必不可少的操作,而分完库之后分布式id 生成缺成了一个问题,需要分布式id 服务生成。
1.获取分布式id 角色会有三个角色,分为:业务服务,分布式id节点服务,分布式id 中心服务。
2. 请求流程两个流程:
业务服务 --> 分布式id节点服务获取号码(根据号码段和号码规则还有set 编号生成id)。
业务服务 --> 分布式id节点服务获取号码 ->分布式id 中心服务获取号码段及号码规则。
3.号码规则:
前缀+时间戳+唯一编号
4.数据库设计
4.1 tb_id_config id 配置
Field name | Type | Comment | Remark |
---|---|---|---|
id | PK | ||
table_name | String | 表名 | |
service_name | String | 服务名 | |
colum_name | String | id,number | |
init_number | int | 初始值 | |
add_number | int | 增值 | |
create_time | dateTime | 创建时间 | |
update_time | dateTime | 修改时间 |
4.2.tb_id_config_regular id 配置规则
Field name | Type | Comment | Remark |
---|---|---|---|
id | PK | ||
type | Integer | 1.前缀,2.时间戳,3.号码段 | |
keywords | String | 关键词(前缀时) | |
create_time | dateTime | 创建时间 | |
update_time | dateTime | 修改时间 |
4.3.tb_id_operator_log id 操作log 日志
Field name | Type | Comment | Remark |
---|---|---|---|
id | PK | ||
config_id | FK | tb_id_config id | |
unique_key | String | 唯一key | |
min_number | Integer | 号段最小值 | |
max_number | Integer | 号段最大值 | |
config_number | Integer | 配置号(获取号段的redis 分布式节点服务号) | |
create_time | dateTime | 创建时间 | |
update_time | dateTime | 修改时间 | |
version | Integer | 数据版本 |
4.4 插入log ,在通过unique_key 查询出来,这个是针对每个分布式id节点服务请求生成的唯一键
EXPLAIN
INSERT INTO `tb_id_operator_log` ( `config_id`, `unique_key`, `min_number`, `max_number`, create_time, update_time ) SELECT
1,
2,
min_number + 1000,
max_number + 1000,now(),now()
FROM
tb_id_operator_log
WHERE
config_id = 1
ORDER BY
id DESC
LIMIT 1
4.5分布式id节点服务,会把号段信息以及号配置信息存放到redis 计数器中,业务来一个请求redis 计数器获取后+1,注意这里当号段使用号段到60%,需要缓存下一个号端,避免使用完了,或者是等待中心发号段。
边栏推荐
猜你喜欢
Excel受保护的工作表怎么操作?
SiO2 / KH550 modified ferroferric oxide nano magnetic particles | PDA package the ferromagnetic oxide nanoparticles (research)
pycharm环境包导入到另外一个环境
install flask
输入框最前面添加放大镜&&background-image和background-color冲突问题
Flask failed to create database without error
安装flask
什么是excel文件保护
Introduction to AIOT
INSTALL_RPATH and BUILD_RPATH problem in CMake
随机推荐
22 high mid term paper topics forecast
Use of PlantUML plugin in idea
什么是excel文件保护
阿里巴巴官方技术号
为什么以太网无法接收大于1500字节的数据包?
像天才一样思考:如何培养自己的创造力?
【R语言】对文件进行归一化整理到各文件类型文件夹
默默重新开始,第一页也是新的一页
uniapp实现防抖搜索
C语言实现顺序栈和链队列
Common Oracle Commands
CalBioreagents超全Id 蛋白兔单克隆抗体,助力科研
Unity Gobang Game Design and Simple AI (2)
golang zip aes base64
Unity backgammon game design and simple AI implementation (1)
mongo+ycsb性能测试及线程数分析
[MySQL] Second, the relationship between processes, MySQL password cracking, table building and database building related commands
简单使用Lambda表达式
Use baidu EasyDL intelligent bin
推进产教融合 赋能教育创新发展 | 华云数据荣获“企业贡献奖”