龙空技术网

别再傻乎乎地用主键递增的方式设计数据库了

Github导航站 4638

前言:

目前各位老铁们对“雪花飘移”都比较关注,咱们都想要知道一些“雪花飘移”的相关知识。那么小编也在网摘上收集了一些有关“雪花飘移””的相关内容,希望各位老铁们能喜欢,你们快快来学习一下吧!

  大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!

你是否烦恼过这些问题作为架构设计的你,想要解决数据库主键唯一的问题,特别是在分布式系统多数据库的时候。你希望这个主键是用最少的存储空间,索引速度更快,Select、Insert 和 Update 更迅速。你要考虑在分库分表(合库合表)的时候,主键值可直接使用,并能反映业务时序。如果这样的主键值太长,超过前端 JS Number 类型最大值,须把 Long 型转换为 String 型,你会觉得有点沮丧。哪怕 Guid 能自增,但占用空间大,这也不是你想要的。你的应用实例可能超过50个,每个并发请求可能达10W/s。你希望系统能运行 100 年以上。

  为了解决这个问题,今天小编推荐一种全新的雪花漂移算法——IdGenerator,让ID更短、生成速度更快。 核心在于缩短ID长度的同时,还能拥有极高瞬时并发处理量(50W/0.1s)。 顶尖优化,超强效能(位数更短,速度更快),全新 SnowFlake 算法,支持 C#/Java/Go/PHP 等语言。

开源协议

  使用 MIT 开源许可协议

链接地址传统算法问题生成的ID太长。瞬时并发量不够。不能解决时间回拨问题。不支持后补生成前序ID。依赖外部存储系统。新算法特点整形数字,随时间单调递增(不一定连续),长度更短,用50年都不会超过 js Number类型最大值。(默认配置 WorkerId 是6bit,自增数是6bit)速度更快,是传统雪花算法的2-5倍,0.1秒可生成50万个。(i7笔记本,默认算法配置6bit+6bit)支持时间回拨处理。比如服务器时间回拨1秒,本算法能自动适应生成临界时间的唯一ID。支持手工插入新ID。当业务需要在历史时间生成新ID时,用本算法的预留位能生成5000个每秒。漂移时能外发通知事件。让调用方确切知道算法漂移记录,Log并发调用量。不依赖任何外部缓存和数据库。(但 WorkerId 必须由外部指定)性能数据

(参数:10位自增序列,1000次漂移最大值)

效果js Number 类型最大数值:9007199254740992,本算法在保持并发性能(5W+/0.01s)和最大64个 WorkerId(6bit)的同时,能用70年才到 js Number Max 值。增加WorkerId位数到8bit(256节点)时,15年达到 js Number Max 值。极致性能:500W/1s。所有测试数据均基于8代低压i7计算。“我”是什么本算法是一个类库,它基于 net standard2.0 基础库,不依赖任何第三方组件。本算法不依赖任何外部数据系统(除了要被指定 WorkerId 之外)。适用范围小型、中型、大型需要全局唯一Id(不用Guid)的项目。分布式项目。不想将 Long 型转 String 给前端用的项目。(若前端支持bigint,则可不转类型)如何处理时间回拨当发生系统时间回拨时,算法采用过去时序的预留序数生成新的ID。默认每秒生成100个(速度可调整)。回拨生成的ID序号,默认靠前,也可以调整为靠后。许时间回拨至本算法预设基数(参数可调)。能用多久在默认配置下,ID可用 71000 年不重复。在支持 1024 个工作节点时,ID可用 4480 年不重复。在支持 4096 个工作节点时,ID可用 1120 年不重复。以上所有工作节点,均拥有 50W/0.1s 瞬时处理速度。结尾

  本期就分享到这里,我是小编南风吹,专注分享好玩有趣、新奇、实用的开源项目及开发者工具、学习资源!希望能与大家共同学习交流。

标签: #雪花飘移