分布式id生成数据库号段算法的golang实现
分布式id生成数据库号段算法的golang实现
- 介绍
- 项目结构
- 使用说明
- 核心流程说明
- 1. 定义id生成器结构体
- 2. id生成器共有Monitor,GetOne, Close三个对外暴露的方法。
- 3. 数据表结构
- 参与贡献
介绍
项目地址:gitee;github
本项目主要利用go语言(go1.20)实现了一种id生成器,并提供了http和grpc两种访问方式。项目中采用的生成算法主要基于数据库号段算法实现。关于这个算法可以参考
美团Left。
项目结构
main.go - 程序入口,项目初始化,并实现了平滑停服
router - 路由
controller - api接口
model - 数据模型定义
dao - 数据表操作
logic - 逻辑操作grpcserver - grpc服务器idsequence - 实现了数据号段生成算法
conf - 数据库配置信息
common - 公共库config - viper配置dto - 请求响应/返回值结构体merrors - 错误码、错误信息定义mysql - 数据库连接池xgrpc - grpc server的proto定义
使用说明
- 项目采用go1.20编写,采用go mod进行包管理
- 编译运行 go build && ./go-tinyid
- 项目提供http和grpc两种访问方式,可自行选择
核心流程说明
1. 定义id生成器结构体
type IdSequence struct {idListLength int64 // 号段长度,可根据业务qps自行设置biz string // 业务类型ids chan int64 // 生成的id list, chan通道stopMonitor chan bool // 停止标志channel类型}
2. id生成器共有Monitor,GetOne, Close三个对外暴露的方法。
Monitor方法主要实现对id list的监控,当检测到id list为空时,会调用add方法,向id list中添加idListLength个新id,在添加新id过程中,
会使用mysql 乐观锁,以防止其他进程也在更新获取到的最新id;GetOne方法主要会从id list里面获取一个新的id;Close方法主要是关闭channel,停止写入新的id;
3. 数据表结构
create table if not exists test.sequence
(id bigint unsigned auto_increment primary key,biz varchar(128) default '' not null comment '业务类型',value bigint default 0 not null comment 'id值',version bigint default 0 not null comment '乐观锁',is_del tinyint default 0 not null comment '是否软删标志',create_time timestamp default CURRENT_TIMESTAMP not null comment '创建时间',update_time timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP,unique (version)
) charset = utf8mb4;
参与贡献
项目地址:https://gitee.com/git-lz/go-tinyid;https://github.com/007LiZhen/go-tinyid
欢迎大家积极提issue和MR, 共建golang版本的tinyid
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request
相关文章:
分布式id生成数据库号段算法的golang实现
分布式id生成数据库号段算法的golang实现 介绍项目结构使用说明核心流程说明1. 定义id生成器结构体2. id生成器共有Monitor,GetOne, Close三个对外暴露的方法。3. 数据表结构 参与贡献 介绍 项目地址:gitee;github 本项目主要利用go语言(go1…...
【算法 | 模拟No.4】AcWing 756. 蛇形矩阵 AcWing 40. 顺时针打印矩阵
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程&a…...
数据——最为直接的答案
身处于这样一个数字化快速发展、竞争强烈的时代,不管是企业还是个人,大家都需要及时获取前沿动态信息,密切关注市场的变化。但是,在不计其数的企业中,到底行业top 是哪些企业引领潮流? 只有数据能告诉你最…...
php加密解密的用法(对称加密,非对称加密)
加密和摘要的区别 ***摘要:是从已知的数据中,通过摘要计算出一个值,一个数据对应一个或多个摘要的值 *** 比如:md5 和 sha1 sha256 hash 就是得到一个特定的值 ,同一个数据得到的md5 是一样的,不会改变的 比…...
优秀智慧园区案例 - 中建科技产业园(中建·光谷之星),万字长文解析先进智慧园区建设方案经验
一、项目背景 中建科技产业园(中建光谷之星),位于武汉光谷中心城、中国(湖北)自贸试验区武汉片区双核心区,光谷发展主轴高新大道北侧,建筑面积108万平米,是中建三局“中建之星”和“…...
Python基础详解教程------目录大纲
Python基础详解教程------让编程简单 目录 第一章、python基本概念规范... 5 1.1方法(Method)与函数(Function) 5 1.2类(Class)与函数(Function) 6 1.3变量(Variable)与参数(Parameter)及形参与实参... 7 1.4变量(Variable)与属性(Attribute)及property. 8 1.5对象(Objec…...
什么是高防IP?
什么是高防IP? 高防IP是针对互联网服务器在遭受大流量的DDOS攻击后导致服务不可用的情况下,推出的付费增值服务,用户可以通过配置高防IP,将攻击流量引流到高防IP,确保源站的稳定可靠。(无需转移数据&#…...
打开word文档报错,提示HRESULT 0x80004005 位置: 部分: /word/comments.xml,行: 0,列: 0
某用户遇到这样一个奇怪的问题,就是回复完word的批注后,保存文档再打开就会报错,提示很抱歉,无法打开XXX,因为内容有问题。,详细信息提示HRESULT 0x80004005 位置: 部分: /word/comments.xml,行: 0,列: 0 c…...
Allegro层叠中的Etch Factor-铜皮的腐蚀因子如何计算
Allegro层叠中的Etch Factor-铜皮的腐蚀因子如何计算 在用Allegro进行PCB设计的时候,Cross-section中需要填入对应的信息,一般填入每层的厚度即可,如下图 当PCB需要进行仿真分析的时候,Etch-Factor这个值是必须要填写的,如下图 目前看到的都是90这个值,这是一个理论值。 …...
20 个好用的一行 Java代码
今天分享给大家20个 令人惊叹的 Java一行代码,让你们的工作更轻松。一起来看看吧! 1. 获取浏览器 Cookie 的值 使用document.cookie 来获取 Cookie 的值。 2. 将 RGB 转换为十六进制 3. 复制到剪贴板 使用 navigator.clipboard.writeText 轻松将任何文本…...
Java编程--单例模式(饿汉模式/懒汉模式)/阻塞队列
前言 逆水行舟,不进则退!!! 目录 单例模式 饿汉模式: 懒汉模式: 什么是阻塞队列 什么是高内聚 低耦合 阻塞队列的实现 单例模式 单例模式(Singleton Pattern)是一种常见…...
【go-zero】go-zero 脚手架 simple-admin 第二章:通过goctls生成api整个项目
往期回顾 一、simple-admin 开篇:安装 了解 goctls 二、go-zero 脚手架 simple-admin 第一章:通过goctls生成rpc整个项目 | go-zero整合 ENT数据库orm框架 本章内容 往期回顾一、simple-admin 创建rpc项目实战1、创建git仓库1.1、创建任意git仓库1.2、克隆到本地2、创建API项…...
小程序用户隐私设置指引
自2021年11月1日起,个人信息保护法正式执行了。微信小程序在这方面也加强了整改。小程序对涉及个人隐私使用的需要严格要求修改,不修正的小程序将被下架风险;新上线的小程序也要完善小程序个人隐私设置,不然代码提交不会通过。 小…...
Docker - 容器数据卷
Docker - 容器数据卷 什么是容器数据卷 等同于挂载,将容器内的目录地址指向于宿主机文件系统中 直接使用命令来挂载 -v docker run -it -v 主机目录:容器内目录# 测试 docker run -it -v /root:/home centos /bin/bash [rootiZ2zeg7mctvft5renx1qvbZ ~]# docker …...
YOLOv5独家最新改进《新颖高效AsDDet检测头》VisDrone数据集mAP涨点,即插即用|检测头新颖改进,性能高效涨点
💡本篇内容:YOLOv5独家最新改进《新颖高效AsDDet检测头》VisDrone数据集mAP涨点1.4%,即插即用|检测头新颖改进,性能高效涨点 💡🚀🚀🚀本博客 YOLO系列 + 全新新颖原创高效AsDDet检测头 改进创新点改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可…...
第十三章 网络管理实战1
第十三章 网络管理实战1 1osl模型 1.1简介 开发系统互联模型 开放式系统互联 国际标准化组织 ISO 指定定义了不同计算机互联的标准设计和描述 计算机网络通信的框架设计和描述 计算机网络通信的框架 全世界网络通信的工作分为7层 应用层表示层会话层传输层网络层数据链路…...
警惕!.360、.halo病毒来袭,这些建议能让你的数据安如泰山!
导言: 嘿,亲爱的读者们,今天91数据恢复讨论一个挑战性极高的问题——.halo、.360病毒,这可是个十足的恶棍,专门对你珍贵的数据下黑手!别怕,我这就告诉你怎么防患于未然,还有被它拐走…...
ubuntu使用快照部署polygon全节点
文章目录 一、 环境部署1.1 golang环境部署1.2 git安装1.3 gcc安装1.4 zstd 安装1.5 pv 安装1.6 aria2c 安装二、安装 polygon2.1 heimdall 安装2.1.1 heimdall 编译2.1.2 初始化 heimdall2.1.3 修改配置文件2.2 bor 安装2.2.1 bor 编译2.2.2 创建bor数据目录2.2.3 修改配置文件…...
理解快速排序
理解快速排序 首先了解以下快速排序 快速排序(QuickSort)是一种常用的排序算法,属于比较排序算法的一种。它是由英国计算机科学家Tony Hoare于1960年提出的,是一种分而治之(divide and conquer)的算法。 …...
初始MySQL(三)(合计函数,分组函数,字符串相关函数,数字相关函数,时间日期函数,加密函数,流程控制函数)
目录 合计/统计函数 count 返回行的总数 sum 合计函数 - avg group by 字符串相关函数 数学相关函数 时间日期相关函数 加密函数 流程控制函数 合计/统计函数 count 返回行的总数 Select count(*) | count (列名) from tablename [WHERE where_definition] #演…...
OneTime-BH1750:超低功耗单次测量光照传感器驱动库
1. 项目概述OneTime-BH1750 是一款专为资源受限嵌入式平台设计的轻量级 BH1750 光照传感器驱动库。其核心设计哲学并非追求功能堆砌,而是围绕“极简、极省、极稳”三大工程目标展开:在保证功能完整性的前提下,将代码体积压缩至最小࿰…...
Arduino嵌入式Google日历客户端:轻量级流式JSON解析
1. 项目概述 GoogleCalendarClient 是一个面向 Arduino 微控制器平台的轻量级 C 库,专为在资源受限的嵌入式系统中访问 Google Calendar REST API 而设计。其核心目标并非实现完整的 OAuth2 流程或全功能日历管理,而是提供一种 工程上可行、内存可预测…...
4步打造专属《无人深空》体验:NomNom存档编辑器全功能指南
4步打造专属《无人深空》体验:NomNom存档编辑器全功能指南 【免费下载链接】NomNom NomNom is the most complete savegame editor for NMS but also shows additional information around the data youre about to change. You can also easily look up each item …...
C#海康视觉VM4.1二次开发框架源码:多流程、运动控制卡、服务框架详解
C#基于海康视觉VM4.1的二次开发框架源码,有多流程框架 运动控制卡 服务框架 需要有海康VM的基础并且有海康威视VM开发狗GVM V2.7 代码功能说明引言本文旨在详细说明GVM V2.7版本软件的核心功能及其实现机制。GVM是一款基于海康威视VM4.1视觉平台进行二次开发的框架软…...
SAR信号处理中的汉宁窗优化——旁瓣抑制与分辨率平衡的艺术
1. 汉宁窗在SAR信号处理中的核心作用 我第一次接触汉宁窗是在处理火星探测器雷达数据时遇到的棘手问题。当时团队获取的火星次表层雷达图像出现了严重的旁瓣干扰,就像在干净的画布上泼洒了墨水点。导师随手调出汉宁窗函数说:"试试这个魔法棒"—…...
两相交错并联同步整流双向Buck Boost变换器仿真研究
两相交错并联同步整流双向Buck Boost变换器仿真 所有开关管均可实现ZVs软开关 Buck模式 输入:200-360VDC 额定280VDC 输出:140VDC 10A 开关频率:10kHz Boost模式: 输入:120-160VDC 额定140VDC 输出:280VDC…...
e1547:为e621社区构建的专业级移动端浏览解决方案
e1547:为e621社区构建的专业级移动端浏览解决方案 【免费下载链接】e1547 A sophisticated e621 browser 项目地址: https://gitcode.com/gh_mirrors/e1/e1547 在数字内容消费日益移动化的今天,专业社区平台的移动端体验往往成为用户留存的关键因…...
SQLite Developer实战:如何高效管理Android开发中的.db文件(含数据导入导出技巧)
SQLite Developer实战:高效管理Android开发中的.db文件 在移动应用开发领域,数据存储始终是核心需求之一。对于Android开发者而言,SQLite作为轻量级的关系型数据库,因其零配置、无服务器特性而成为本地存储的首选方案。然而&…...
SpringAI与DeepSeek集成:兼容OpenAI API的流式对话实践
1. 环境准备与基础配置 在开始集成SpringAI与DeepSeek之前,我们需要确保开发环境满足以下要求: JDK 17或更高版本:Spring Boot 3.x系列需要JDK 17作为最低版本支持Spring Boot 3.4.2:这是当前推荐的稳定版本Maven或Gradle…...
如何用5步告别Mac菜单栏混乱?Ice帮你打造高效工作空间
如何用5步告别Mac菜单栏混乱?Ice帮你打造高效工作空间 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 你是否曾因Mac菜单栏上密密麻麻的图标而感到焦虑?随着工作时间的推移&a…...
