:IdGenerator:雪花算法中非常好用的纯数字自增长ID生成器
针对大家在测试过程中,经常出现的性能问题,以下给出3组最佳实践配置:
总之,增加SeqBitLength会让性能更高,但生成的ID也会更长。
(参数:10位自增序列,1000次漂移最大值)
特别提示:如果一台服务器部署多个独立服务,需要为每个服务指定不同的WorkerId。
第二版计划增加参数:
源码路径:/Go/source/regworkerid/reghelper.go
.NETStandard2.0+(支持:.netframework4.6.1+/.netcore2.0+/.net5/.net6+/mono5.4+/Unity2018+/Xamarin/)
或者使用nugetCLI时
第1步,全局初始化(应用程序启动时执行一次):
//创建IdGeneratorOptions对象,可在构造函数中输入WorkerId:
varoptions=newIdGeneratorOptions(Your_Unique_Worker_Id);
//options.WorkerIdBitLength=10;//默认值6,限定WorkerId最大值为2^6-1,即默认最多支持64个节点。
//options.SeqBitLength=6;//默认值6,限制每毫秒生成的ID个数。若生成速度超过5万个/秒,建议加大SeqBitLength到10。
//options.BaseTime=Your_Base_Time;//如果要兼容老系统的雪花算法,此处应设置为老系统的BaseTime。
//......其它参数参考IdGeneratorOptions定义。
//保存参数(务必调用,否则参数设置不生效):
YitIdHelper.SetIdGenerator(options);
//以上过程只需全局一次,且应在生成ID之前完成。
第2步,生成ID:
//初始化后,在任何需要生成ID的地方,调用以下方法:
varnewId=YitIdHelper.NextId();
代码贡献者:bubao布宝
执行测试代码
constGenId=require("./index.js")
constgenid=newGenId({WorkerId:1});
for(letindex=0;index<5000;index++){
console.log(genid.NextId());
}
在mysql中int类型最大长度是10位数字,由于本算法默认生成的是15位,最短也是11位,所以在mysql中需要使用bigint数据类型