当前位置:网站首页>分布式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 14.5分布式id节点服务,会把号段信息以及号配置信息存放到redis 计数器中,业务来一个请求redis 计数器获取后+1,注意这里当号段使用号段到60%,需要缓存下一个号端,避免使用完了,或者是等待中心发号段。
边栏推荐
- 运放-运算放大器经典应用电路大全-应用电路大全
- APP product source data interface (taobao, jingdong/spelling/suning/trill platform details a lot data analysis interface) code and docking tutorial
- Ferric oxide/bismuth sulfide nanocomposites ([email protected]@BSABiS nanoparticles) | dendrimer-stabilized bismuth sulfide nanop
- 使用百度EasyDL实现智能垃圾箱
- db.sqlite3没有“as Data Source“解决方法
- Excel受保护的工作表怎么操作?
- PDF不能打印和复制的问题如何解决?
- Fragments
- Unity 五子棋游戏设计和简单AI(3)
- [R language] Extract all files under a folder to a specific folder
猜你喜欢

Deep Learning - Principles of Neural Networks 2

pdf加密、找回密码

治疗消化性溃疡—Toronto Research Chemicals 甘氨酸铝

运放-运算放大器经典应用电路大全-应用电路大全

6 states of a thread

工控设备的系统如何进行加固

static静态关键字和继承

MYSQL Advanced Chapter - Query Interception Analysis, Lock Mechanism, Master-Slave Replication

关于如何查找NXP S32K1xx系列单片机的封装信息和引脚定义

【Feel】In the Unity Feel plugin, Camera cannot display CameraShake correctly
随机推荐
Adds, deletes, searches, and changes the leading doubly circular linked list (implemented in C language)
Inception V3 闭眼检测
中英文说明书丨CalBioreagents 山羊抗人白蛋白,IgG组分
[MySQL] Second, the relationship between processes, MySQL password cracking, table building and database building related commands
简单使用Lambda表达式
io.lettuce.core。RedisCommandTimeoutException命令超时
单例模式
关于如何查找NXP S32K1xx系列单片机的封装信息和引脚定义
io.lettuce.core.RedisCommandTimeoutException Command timed out
C# 利用iTextSharp画PDF
Qt 学习(三) —— Qt 模块
安装flask
Unity Gobang Game Design and Simple AI (2)
推进产教融合 赋能教育创新发展 | 华云数据荣获“企业贡献奖”
crc计算
6 states of a thread
代码目录结构
为什么以太网无法接收大于1500字节的数据包?
[R language] Extract all files under a folder to a specific folder
中英文说明书丨CalBioreagents ACTH N端单克隆抗体