当前位置:网站首页>分布式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%,需要缓存下一个号端,避免使用完了,或者是等待中心发号段。
边栏推荐
- 默默重新开始,第一页也是新的一页
- Altium designer软件常用最全封装库,包含原理图库、PCB库和3D模型库
- How to find package information and pin definitions for NXP S32K1xx series microcontrollers
- Error: flask: TypeError: 'function' object is not iterable
- [MySQL]二、进程的关系、MySQL密码破解、建表和建库相关命令
- Invalid argument(s) appears when redis runs lua script
- 使用百度EasyDL实现智能垃圾箱
- static静态关键字和继承
- kubernetes security
- 简单使用Lambda表达式
猜你喜欢
普罗米修斯原理及节点发布
PDF不能打印和复制的问题如何解决?
Word文件的只读模式没有密码怎么退出?
深度学习-神经网络原理2
中英文说明书丨TRC 交替醇(Catalogue NumberA575760)
Inception V3 闭眼检测
中英文说明书丨CalBioreagents ACTH N端单克隆抗体
Adds, deletes, searches, and changes the leading doubly circular linked list (implemented in C language)
Deep Learning - Principles of Neural Networks 2
Unity五子棋游戏设计 和简单AI实现(1)
随机推荐
golang zip aes base64
phpstudy install flarum forum
报错:FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS重大开销和将disab补充道
报错jinja2.exceptions.UndefinedError: ‘form‘ is undefined
[HNOI2002]营业额统计
C语言实现顺序栈和链队列
数据库中间件-jdbi
DevNet: Deviation Aware Networkfor Lane Detection
程序性能分析 —— 复杂度分析
Search 1688 product interface by image (item_search_img-search 1688 product by image (Politao interface) code docking tutorial
【Feel】In the Unity Feel plugin, Camera cannot display CameraShake correctly
抗菌药物丨Toronto Research Chemicals 天冬酰胺D
Xilinx Zynq ZynqMP DNA
MYSQL Advanced Chapter - Query Interception Analysis, Lock Mechanism, Master-Slave Replication
05 多线程与高并发 - ThreadPoolExecutor 源码解析
【R语言】把文件夹下的所有文件提取到特定文件夹
String.toLowerCase(Locale.ROOT)
db.sqlite3 has no "as Data Source" workaround
crc计算
Excel受保护的工作表怎么操作?