From 1fc851a996eeab21c17c415b5bfe362da9bad654 Mon Sep 17 00:00:00 2001 From: yitter Date: Sun, 4 Apr 2021 12:19:18 +0800 Subject: [PATCH] auto commit --- README.md | 69 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index dc72fa9..5cdcbc3 100644 --- a/README.md +++ b/README.md @@ -79,25 +79,48 @@ QQ群:646049993 | 传统雪花算法 | 0.0045s | 0.053s | 0.556s | | 雪花漂移算法 | 0.0015s | 0.012s | 0.113s | -## 效果 +🟣 极致性能:500W/s~3000W/s。(所有测试数据均基于8代低压i7计算。) -🟣 js Number 类型最大数值:9007199254740992,本算法在保持并发性能(5W+/0.01s)和最大64个 WorkerId(6bit)的同时,能用70年才到 js Number Max 值。 +## 适用范围 -🟣 增加WorkerId位数到8bit(256节点)时,15年达到 js Number Max 值。 +🔷小型、中型、大型需要全局唯一Id(不用Guid)的项目。 +🔷 分布式项目。 -🟣 极致性能:500W/s~3000W/s。(所有测试数据均基于8代低压i7计算。) +🔷不想将 Long 型转 String 给前端用的项目。(若前端支持bigint,则可不转类型) + + +## 如何处理时间回拨 +🔶 当发生系统时间回拨时,算法采用过去时序的预留序数生成新的ID。 -#### 💎 生成的ID +🔶 回拨生成的ID序号,默认靠前,也可以调整为靠后。 + +🔶 允许时间回拨至本算法预设基数(参数可调)。 + + +## 💎 配置参数 + + WorkerIdBitLength,决定 WorkerId 的最大值。 + + SeqBitLength,决定每毫秒生成的ID个数。 + + WorkerIdBitLength + SeqBitLength 必须小于12。 + + WorkerId,最大值2^WorkerIdBitLength-1。 + + +💍 默认配置值: -默认配置: ``` WorkerIdBitLength = 6 SeqBitLength = 6 ``` -ID示例(基于默认配置): +## 💎 关于ID + +💍 ID示例(基于默认配置): + ``` 129053495681099 (本算法运行1年) 387750301904971 (运行3年) @@ -107,28 +130,17 @@ ID示例(基于默认配置): 165399880288699493 (普通雪花算法生成的ID) ``` -本算法生成的 ID 值,是 js Number 最大值的 1%-10%,是普通雪花算法值的千分之一,而计算能力却超过普通雪花算法。 - - -## 适用范围 - -🔷小型、中型、大型需要全局唯一Id(不用Guid)的项目。 - -🔷 分布式项目。 - -🔷不想将 Long 型转 String 给前端用的项目。(若前端支持bigint,则可不转类型) - +🟣 本算法生成的 ID 值,是 js Number 最大值的 1%-10%,是普通雪花算法值的千分之一,而计算能力却超过普通雪花算法。 -## 如何处理时间回拨 +🟣 js Number 类型最大数值:9007199254740992,本算法在保持并发性能(5W+/0.01s)和最大64个 WorkerId(6bit)的同时,能用70年才到 js Number Max 值。 -🔶 当发生系统时间回拨时,算法采用过去时序的预留序数生成新的ID。 -🔶 回拨生成的ID序号,默认靠前,也可以调整为靠后。 +### 长度估算 -🔶 允许时间回拨至本算法预设基数(参数可调)。 +💍 每增加 1位 WorkerIdBitLength 或 SeqBitLength,生成的ID数字值将会乘以2,反之则除以2。 -## 能用多久 +### 能用多久 🔵 在默认配置下,ID可用 71000 年不重复。 @@ -139,17 +151,6 @@ ID示例(基于默认配置): 🔵 以上所有工作节点,均拥有 50W/0.1s 瞬时处理速度。 -#### 默认配置 - -💍 WorkerIdBitLength=6,能支持64个 WorkerId,编号0~63。 - -💍 可通过减少 WorkerIdBitLength 到1~4(为4时最大支持WorkerId为2^4=16个),以减少Id长度。 - -💍 SeqBitLength=6,能支持每秒并发5W请求时,平均处理速度不超过 0.005 s。(不同语言略有差别,最高性能不超过0.002s,平均不超过0.005s) - -💍 可通过增加 SeqBitLength,支持更高的每秒并发数。默认配置能很高效地支持每秒 5W 并发请求,若要求更高,可适当增加 SeqBitLength 到 8~16,但这将增加Id长度。 - - ## 集成建议 #### 💎 常规集成