比雪花算法更好用的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

效果

最新文章

  1. C#将集合快速排序
  2. 如何手动添加Android Dependencies包
  3. Suse系统用户不能登录报错
  4. MongoDB自学笔记2---1.2 初识MongoDB
  5. 哪些产品不用开发原生APP,微信公众号就够了?
  6. 用TcpClient如何获取远程网页的内容
  7. jQuery插件,将内容插入到光标处
  8. 冒泡排序的python代码实现
  9. HDOJ 题目3555 Bomb(数位DP)
  10. AnyConnect使用说明(电脑版Windows)
  11. crontab 任务程序执行乱码的问题
  12. 移动端 上传头像 并裁剪功能(h5)
  13. 判断浏览器是否支持HTML5 video
  14. (count 或直接枚举) 统计字符 hdu1860
  15. 《2017年Q2中国城市研究报告
  16. Hibernate学习笔记1.1(简单插入数据)
  17. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
  18. 修改jvm内存大小
  19. python3精简笔记(三)——高级特性
  20. LIS和LCS LCIS

热门文章

  1. js location API All In One
  2. GitHub & Hacker & MicroSoft
  3. React Hooks & Context API
  4. express+apollo+mongodb
  5. Mac上的Redis安装和使用
  6. eclipse中lombok注解不生效
  7. 你要是还学不会,请提刀来见 Typora+PicGo+Gitee + node.js 打造个人高效稳定优雅图床
  8. nacos服务注册之服务器端Distro
  9. MySQL注入点与SQL语句的关系
  10. 上百本电子书(Java/Hadoop/Spark/Linux/机器学习/)免费分享 百度云持续更新