|
|
@@ -1,11 +1,17 @@ |
|
|
|
# 雪花算法里最好用的主键ID生成工具
|
|
|
|
|
|
|
|
## 💎 最佳实践(置顶)
|
|
|
|
|
|
|
|
## 技术支持
|
|
|
|
针对大家再测试过程中,经常出现的性能问题,以下给出3组最佳实践配置:
|
|
|
|
|
|
|
|
开源地址:https://github.com/yitter/IdGenerator
|
|
|
|
❄ 如果生成ID速度要求不超过5W/s,不用修改任何配置参数
|
|
|
|
|
|
|
|
❄ 如果生成ID速度要求超过5W/s,低于50W,推荐修改:SeqBitLength=10(或更大)
|
|
|
|
|
|
|
|
❄ 如果生成ID速度要求超过50W/s,接近500W,推荐修改:SeqBitLength=14(或更大),TopOverCostCount=5000
|
|
|
|
|
|
|
|
总之,增加 SeqBitLength 会让性能更高,但生成的 ID 也会更长。
|
|
|
|
|
|
|
|
QQ群:646049993
|
|
|
|
|
|
|
|
## 💎 算法介绍
|
|
|
|
|
|
|
@@ -134,20 +140,6 @@ QQ群:646049993 |
|
|
|
🔵 在支持 4096 个工作节点时,ID可用 1120 年不重复。
|
|
|
|
|
|
|
|
|
|
|
|
### 补充说明
|
|
|
|
|
|
|
|
❄ 默认算法,每个时间戳开始,生成的ID是奇数。
|
|
|
|
|
|
|
|
❄ 可以把ID右移 WorkerIdBitLength+SeqBitLength,得到时间戳。
|
|
|
|
|
|
|
|
## 性能说明
|
|
|
|
|
|
|
|
❄ 在生成速度不超过 5W个/秒 的情况下,无须修改 SeqBitLength。
|
|
|
|
|
|
|
|
❄ 超过5W,不超过50W,改 SeqBitLength 为10。
|
|
|
|
|
|
|
|
❄ 超过 50W,改为 12~16。
|
|
|
|
|
|
|
|
## 💎 参数设置
|
|
|
|
|
|
|
|
❄ ***WorkerIdBitLength***,机器码位长,决定 WorkerId 的最大值,**默认值6**,取值范围 [1, 19],实际上有些语言采用 无符号 ushort (uint16) 类型接收该参数,所以最大值是16,如果是采用 有符号 short (int16),则最大值为15。
|
|
|
@@ -264,6 +256,13 @@ extern GoInt32 Validate(GoInt32 workerId); |
|
|
|
| 🌲 D | [查看示例][72] |
|
|
|
|
|
|
|
|
|
|
|
|
## 技术支持
|
|
|
|
|
|
|
|
开源地址:https://github.com/yitter/IdGenerator
|
|
|
|
|
|
|
|
QQ群:646049993
|
|
|
|
|
|
|
|
|
|
|
|
[comment]: <> ( ## 为什么用雪花ID?)
|
|
|
|
[comment]: <> ( ❄ 因为大厂也在用,推特、百度、美团、滴滴等等。)
|
|
|
|
[comment]: <> ( ❄ 雪花ID是走向分布式架构的垫脚石,如果只会Guid和数据库自增,怎敢说会分布式系统架构。)
|
|
|
|