开源一个比雪花算法更好用的ID生成算法(雪花漂移)
比雪花算法更好用的ID生成算法(单机或分布式唯一ID)
转载及版权声明
本人从未在博客园之外的网站,发表过本算法长文,其它网站所现文章,均属他人拷贝之作。
所有拷贝之作,均须保留项目开源链接,否则禁止转载。
拷贝之作,内容难免过期,当前页面才有最新内容。
算法介绍
一个全新的雪花漂移算法,生成的ID更短、速度更快。
核心在于缩短ID长度的同时,具有极高瞬时并发处理量(保守值 50W/0.1s)。
原生支持 C#/Java/Go/Rust/C 等语言,并由 Rust 提供 PHP、Python、Node.js、Ruby 等语言多线程安全调用库(FFI)。如果你的应用有语言开发,基于本算法提供的逻辑实现,集成会更简单,逻辑会更一致。
支持 k8s 等容器化部署,自动注册 WorkerId。
可在单机或分布式环境中生成唯一ID。
技术支持
开源地址1:https://gitee.com/yitter/idgenerator
开源地址2:https://github.com/yitter/idgenerator
QQ群:646049993
需求来源
作为架构设计的你,想要解决数据库主键唯一的问题,特别是在分布式系统多数据库的时候。
你希望这个主键是用最少的存储空间,索引速度更快,Select、Insert 和 Update 更迅速。
你要考虑在分库分表(合库合表)时,主键值可直接使用,并能反映业务时序。
如果这样的主键值太长,超过前端 JS Number 类型最大值,须把 Long 型转换为 String 型,你会觉得有点沮丧。
尽管 Guid 能自增,但占用空间大,索引速度慢,你也不想用它。
应用实例可能超过50个,每个并发请求可达10W/s。
在容器环境部署应用(水平扩展、自动伸缩)。
不想依赖 redis 的自增操作。
你希望系统运行 100 年以上。
传统算法问题
生成的ID太长。
瞬时并发量不够。
不能解决时间回拨问题。
不支持后补生成前序ID。
依赖外部存储系统。
新算法特点
整形数字,随时间单调递增(不一定连续),长度更短,用50年都不会超过 js Number类型最大值。(默认配置 WorkerId 是6bit,自增数是6bit)
速度更快,是传统雪花算法的2-5倍,0.1秒可生成50万个。(i7笔记本,默认算法配置6bit+6bit)
支持时间回拨处理。比如服务器时间回拨1秒,本算法能自动适应生成临界时间的唯一ID。
支持手工插入新ID。当业务需要在历史时间生成新ID时,用本算法的预留位能生成5000个每秒。
漂移时能外发通知事件。让调用方确切知道算法漂移记录,Log并发调用量。
不依赖任何外部缓存和数据库。(k8s环境下自动注册 WorkerId 的动态库依赖 redis)
基础功能,开箱即用,无需配置文件、数据库连接等。
性能数据
(参数:10位自增序列,1000次漂移最大值)
连续请求量 | 5K | 5W | 50W |
---|---|---|---|
传统雪花算法 | 0.0045s | 0.053s | 0.556s |
雪花漂移算法 | 0.0015s | 0.012s | 0.113s |
效果
最新文章
- C#将集合快速排序
- 如何手动添加Android Dependencies包
- Suse系统用户不能登录报错
- MongoDB自学笔记2---1.2 初识MongoDB
- 哪些产品不用开发原生APP,微信公众号就够了?
- 用TcpClient如何获取远程网页的内容
- jQuery插件,将内容插入到光标处
- 冒泡排序的python代码实现
- HDOJ 题目3555 Bomb(数位DP)
- AnyConnect使用说明(电脑版Windows)
- crontab 任务程序执行乱码的问题
- 移动端 上传头像 并裁剪功能(h5)
- 判断浏览器是否支持HTML5 video
- (count 或直接枚举) 统计字符 hdu1860
- 《2017年Q2中国城市研究报告
- Hibernate学习笔记1.1(简单插入数据)
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- 修改jvm内存大小
- python3精简笔记(三)——高级特性
- LIS和LCS LCIS
热门文章
- js location API All In One
- GitHub &; Hacker &; MicroSoft
- React Hooks &; Context API
- express+apollo+mongodb
- Mac上的Redis安装和使用
- eclipse中lombok注解不生效
- 你要是还学不会,请提刀来见 Typora+PicGo+Gitee + node.js 打造个人高效稳定优雅图床
- nacos服务注册之服务器端Distro
- MySQL注入点与SQL语句的关系
- 上百本电子书(Java/Hadoop/Spark/Linux/机器学习/)免费分享 百度云持续更新